使用 PyArrow 从 HDFS 读取镶木地板文件

read a parquet files from HDFS using PyArrow

我知道我可以使用 pyarrow.hdfs.connect()

通过 pyarrow 连接到 HDFS 集群

我也知道我可以使用 pyarrow.parquetread_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