【问题标题】:How to write on HDFS using pyarrow如何使用 pyarrow 在 HDFS 上写入
【发布时间】:2019-12-21 08:10:56
【问题描述】:

我正在使用带有 pyarrow 库的 python,我想在 HDFS 上编写一个 pandas 数据帧。这是我的代码

import pandas as pd
import pyarrow as pa

fs = pa.hdfs.connect(namenode, port, username, kerb_ticket)
df = pd.DataFrame(...)
table = pa.Table.from_pandas(df)

根据文档,我应该使用以下代码在 HDFS 上编写 pyarrow.Table

import pyarrow.parquet as pq
pq.write_parquet(table, 'filename.parquet')

我不明白我应该在哪里使用我的连接 (fs),因为如果我不在 write_parquet 中使用它,那么它怎么会知道 HDFS 在哪里?

【问题讨论】:

    标签: hdfs pyarrow libhdfs


    【解决方案1】:

    你可以这样做

    with fs.open(path, 'wb') as f:
       pq.write_parquet(table, f)
    

    我打开了一个关于添加更多关于此的文档的 JIRA

    https://issues.apache.org/jira/browse/ARROW-6239

    【讨论】:

    • 如果位置路径中的文件不存在,这是否有效,对吧?
    【解决方案2】:

    基于文档:https://arrow.apache.org/docs/python/api/formats.html#parquet-files

    您可以使用 write_table 或 write_to_dataset 函数:

    write_table

    write_table 有多个参数,下面几个:

    table -> pyarrow.Table
    where -> this can be a string or the filesystem object
    filesystem -> Default is None
    

    例子

    pq.write_table(table, path, filesystem = fs)
    

    with fs.open(path, 'wb') as f:
        pq.write_table(table, f)
    

    write_to_dataset

    如果要根据表中的特定列对数据进行分区,可以使用 write_to_dataset,示例:

    pq.write_to_dataset(table, path, filesystem = fs, partition_cols = [col1])
    

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 2019-11-06
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多