使用 PyArrow 从 HDFS 读取镶木地板文件
read a parquet files from HDFS using PyArrow
我知道我可以使用 pyarrow.hdfs.connect()
通过 pyarrow 连接到 HDFS 集群
我也知道我可以使用 pyarrow.parquet
的 read_table()
读取镶木地板文件
然而,read_table()
接受一个文件路径,而 hdfs.connect()
给我一个 HadoopFileSystem
实例。
是否可以仅使用 pyarrow(安装了 libhdfs3)来获取驻留在 HDFS 集群中的镶木地板 file/folder?我想得到的是 to_pydict()
函数,然后我可以传递数据。
尝试
fs = pa.hdfs.connect(...)
fs.read_parquet('/path/to/hdfs-file', **other_options)
或
import pyarrow.parquet as pq
with fs.open(path) as f:
pq.read_table(f, **read_options)
我打开了 https://issues.apache.org/jira/browse/ARROW-1848 关于添加一些关于此的更明确的文档
我通过 Pydoop 库和 engine = pyarrow 尝试了同样的方法,它非常适合 me.Here 是通用方法。
!pip install pydoop pyarrow
import pydoop.hdfs as hd
#read files via Pydoop and return df
def readParquetFilesPydoop(path):
with hd.open(path) as f:
df = pd.read_parquet(f ,engine='pyarrow')
logger.info ('file: ' + path + ' : ' + str(df.shape))
return df
我知道我可以使用 pyarrow.hdfs.connect()
我也知道我可以使用 pyarrow.parquet
的 read_table()
然而,read_table()
接受一个文件路径,而 hdfs.connect()
给我一个 HadoopFileSystem
实例。
是否可以仅使用 pyarrow(安装了 libhdfs3)来获取驻留在 HDFS 集群中的镶木地板 file/folder?我想得到的是 to_pydict()
函数,然后我可以传递数据。
尝试
fs = pa.hdfs.connect(...)
fs.read_parquet('/path/to/hdfs-file', **other_options)
或
import pyarrow.parquet as pq
with fs.open(path) as f:
pq.read_table(f, **read_options)
我打开了 https://issues.apache.org/jira/browse/ARROW-1848 关于添加一些关于此的更明确的文档
我通过 Pydoop 库和 engine = pyarrow 尝试了同样的方法,它非常适合 me.Here 是通用方法。
!pip install pydoop pyarrow
import pydoop.hdfs as hd
#read files via Pydoop and return df
def readParquetFilesPydoop(path):
with hd.open(path) as f:
df = pd.read_parquet(f ,engine='pyarrow')
logger.info ('file: ' + path + ' : ' + str(df.shape))
return df