# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Database of Apache Arrow committers and PMC
#
- name: Jacques Nadeau
  role: VP
  alias: jacques
  affiliation: Dremio
- name: Ted Dunning
  role: PMC
  alias: tdunning
  affiliation: MapR
- name: P. Taylor Goetz
  role: PMC
  alias: ptgoetz
  affiliation: Monetate
- name: Julian Hyde
  role: PMC
  alias: jhyde
  affiliation: Looker
- name: Reynold Xin
  role: PMC
  alias: rxin
  affiliation: Databricks
- name: James Taylor
  role: PMC
  alias: jamestaylor
  affiliation: Salesforce
- name: Julien Le Dem
  role: PMC
  alias: julien
  affiliation: Datakin
- name: Jake Luciani
  role: PMC
  alias: jake
  affiliation: DataStax
- name: Jason Altekruse
  role: PMC
  alias: json
  affiliation: Workday
- name: Alex Levenson
  role: PMC
  alias: alexlevenson
  affiliation: Twitter
- name: Parth Chandra
  role: PMC
  alias: parthc
  affiliation: MapR
- name: Marcel Kornacker
  role: PMC
  alias: marcel
  affiliation: Independent
- name: Steven Phillips
  role: PMC
  alias: smp
  affiliation: Dremio
- name: Hanifi Gunes
  role: PMC
  alias: hg
  affiliation: MZ
- name: Abdelhakim Deneche
  role: PMC
  alias: adeneche
  affiliation: Salesforce
- name: Wes McKinney
  role: PMC
  alias: wesm
  affiliation: Ursa Labs / RStudio
- name: David Alves
  role: Committer
  alias: dralves
  affiliation: CortexXus
- name: Ippokratis Pandis
  role: Committer
  alias: ippokratis
  affiliation: Amazon
- name: Uwe L. Korn
  role: PMC
  alias: uwe
  affiliation: Quantco
- name: Kouhei Sutou
  role: PMC
  alias: kou
  affiliation: ClearCode
- name: Philipp Moritz
  role: PMC
  alias: pcmoritz
  affiliation: Anyscale
- name: Phillip Cloud
  role: PMC
  alias: cpcloud
  affiliation: Standard Cognition
- name: Bryan Cutler
  role: Committer
  alias: cutlerb
  affiliation: IBM
- name: Li Jin
  role: Committer
  alias: icexelloss
  affiliation: Two Sigma
- name: Siddharth Teotia
  role: PMC
  alias: siddteotia
  affiliation: LinkedIn
- name: Brian Hulette
  role: Committer
  alias: bhulette
  affiliation: Google
- name: Robert Nishihara
  role: Committer
  alias: robertnishihara
  affiliation: Anyscale
- name: Paul Taylor
  role: Committer
  alias: ptaylor
  affiliation: NVIDIA
- name: Antoine Pitrou
  role: PMC
  alias: apitrou
  affiliation: Independent / Ursa Labs
- name: Andy Grove
  role: PMC
  alias: agrove
  affiliation: NVIDIA
- name: Krisztián Szűcs
  role: PMC
  alias: kszucs
  affiliation: Ursa Labs
- name: Yosuke Shiro
  role: Committer
  alias: shiro
  affiliation: Red Data Tools
- name: Romain Francois
  role: Committer
  alias: romainfrancois
  affiliation: RStudio
- name: Sebastien Binet
  role: PMC
  alias: sbinet
  affiliation: CERN
- name: Paddy Horan
  role: Committer
  alias: paddyhoran
  affiliation: MetLife
- name: Chao Sun
  role: Committer
  alias: sunchao
  affiliation: Uber
- name: Micah Kornfield
  role: PMC
  alias: emkornfield
  affiliation: Google
- name: Neville Dipale
  role: Committer
  alias: nevime
  affiliation: commutenav
- name: François Saint-Jacques
  role: PMC
  alias: fsaintjacques
  affiliation: Ursa Labs / RStudio
- name: Praveen Kumar
  role: Committer
  alias: praveenbingo
  affiliation: Dremio
- name: David Li
  role: Committer
  alias: lidavidm
  affiliation: Two Sigma
- name: Ben Kietzman
  role: Committer
  alias: bkietz
  affiliation: Ursa Labs / RStudio
- name: Kenta Murata
  role: Committer
  alias: mrkn
  affiliation: Speee, Inc.
- name: Neal Richardson
  role: PMC
  alias: npr
  affiliation: Ursa Labs / RStudio
- name: Eric Erhardt
  role: Committer
  alias: eerhardt
  affiliation: Microsoft
- name: Joris van den Bossche
  role: Committer
  alias: jorisvandenbossche
  affiliation: Ursa Labs
- name: Liya Fan
  role: Committer
  alias: liyafan
  affiliation: Alibaba
- name: Ji Liu
  role: Committer
  alias: tianchen
  affiliation: Alibaba
- name: Jorge Cardoso Leitao
  role: Committer
  alias: jorgecarleitao
  affiliation: Munin Data ApS
