【问题标题】:Can pyarrow write multiple parquet files to a folder like fastparquet's file_scheme='hive' option?pyarrow 可以将多个 parquet 文件写入 fastparquet 的 file_scheme='hive' 选项这样的文件夹吗?
【发布时间】:2018-05-09 00:13:41
【问题描述】:

我有一个数百万条记录的 SQL 表,我计划使用 pyarrow 库将其写入文件夹中的许多 parquet 文件。数据内容似乎太大,无法存储在单个 parquet 文件中。

但是,我似乎无法使用 pyarrow 库找到允许我指定以下内容的 API 或参数:

file_scheme="hive"

由 fastparquet python 库支持。

这是我的示例代码:

#!/usr/bin/python

import pyodbc
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

conn_str = 'UID=username;PWD=passwordHere;' + 
    'DRIVER=FreeTDS;SERVERNAME=myConfig;DATABASE=myDB'

#----> Query the SQL database into a Pandas dataframe
conn = pyodbc.connect( conn_str, autocommit=False)
sql = "SELECT * FROM ClientAccount (NOLOCK)"
df = pd.io.sql.read_sql(sql, conn)


#----> Convert the dataframe to a pyarrow table and write it out
table = pa.Table.from_pandas(df)
pq.write_table(table, './clients/' )

这会引发错误:

File "/usr/local/lib/python2.7/dist-packages/pyarrow/parquet.py", line 912, in write_table
    os.remove(where)
OSError: [Errno 21] Is a directory: './clients/'

如果我将最后一行替换为以下内容,它可以正常工作,但只写入一个大文件:

pq.write_table(table, './clients.parquet' )

有什么想法可以用 pyarrow 进行多文件输出吗?

【问题讨论】:

  • 你有没有找到一种方法来对使用 pyarrow 写入的数据进行分区?

标签: python hadoop parquet apache-drill pyarrow


【解决方案1】:

试试pyarrow.parquet.write_to_datasethttps://github.com/apache/arrow/blob/master/python/pyarrow/parquet.py#L938

我打开了https://issues.apache.org/jira/browse/ARROW-1858,关于添加更多关于此的文档。

我建议在邮件列表 dev@arrow.apache.org 上寻求对 Apache Arrow 的支持。谢谢!

【讨论】:

  • 这是否意味着可以选择写入分区数据?我查看了 parquet.py 并没有在 write 函数中看到任何与分区相关的内容。
  • @Drew 是的,write_to_dataset 函数,但尚未记录。 github.com/apache/arrow/blob/…
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2021-12-24
  • 2020-07-10
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多