将Parquet转换为CSV

38

如何在本地文件系统(例如python,某些库等)中将Parquet转换为CSV,但不使用Spark?(尝试找到尽可能简单和简约的解决方案,因为需要自动化一切并且没有太多资源)。

我尝试了例如在我的Mac上使用parquet-tools,但数据输出看起来不正确。

需要使输出这样,即当某些列中不存在数据时,CSV将具有相应的NULL(在两个逗号之间的空列)。

谢谢。

5个回答

68

你可以使用Python包pandaspyarrow来实现这一点(pyarrowpandas的可选依赖项,需要此功能)。

import pandas as pd
df = pd.read_parquet('filename.parquet')
df.to_csv('filename.csv')

当您需要对文件中的内容进行修改时,可以使用pandas操作对df进行标准化处理。


1
开始使用Anaconda和其中的虚拟环境,这个问题就解决了。 - Joe
1
"pyarrow" 目前还没有适用于 Python 3.7 的 wheel 版本。我们即将发布 0.10 版本(1-2 周内), 同时也会提供 3.7 版本的构建。 - Uwe L. Korn
没有,什么都没有。整个输出如下:pydev 调试器: 进程 31141 正在连接 已连接到 pydev 调试器 (build 191.7479.30) 进程以退出代码 -1 结束``` - Rob
你能否直接运行代码,而不使用PyCharm作为远程调试器? - Uwe L. Korn
为避免在 CSV 文件中保存无索引的数据,请使用以下代码:df.to_csv('file.csv', index=False) - Ambareesh
显示剩余4条评论

2
如果您正在使用Jupyter笔记本,您可以使用以下方法:
import sys
import pandas as pd
!{sys.executable} -m pip install pyarrow
parquet_file = 'fhv_tripdata_2022-04.parquet'
df = pd.read_parquet(parquet_file)
csv_output = 'yellow_taxi_cab.csv'
df.to_csv(csv_output, index=False, sep='\t')

2

有一个名为fastparquet的包,可以读取parquet文件中的数据:

from fastparquet import ParquetFile

# Reading the data from Parquet File
pf = ParquetFile("userdata.parquet")

# Converting data in to pandas dataFrame
dataFrame = pf.to_pandas()

# Converting to CSV
dataFrame.to_csv("converted.csv", index = False)

1
已经做出了更改 :) - MANSOOR BASHA SYED

1
你可以使用DuckDB来实现这个功能:
duckb.sql("COPY(SELECT * FROM path/to/file.csv TO 'path/to/file.parquet' (FORMAT 'parquet'))")

你的回答目前写得不够清晰。请编辑以添加更多细节,帮助其他人理解它是如何回答问题的。你可以在帮助中心找到关于如何撰写好答案的更多信息。 - Community
你能详细说明一下吗? - TheTridentGuy supports Ukraine
你能详细说明一下吗? - undefined

0
这里有几个选项,取决于您喜欢使用的技术。
DuckDB(Python + 其他语言)
jcarcamoh DuckDB查询将导入CSV并输出Parquet。
以下是一个DuckDB查询,它将读取一个Parquet文件并输出一个CSV文件:
duckb.sql("COPY(SELECT * FROM 'path/to/file.parquet' TO 'path/to/file.csv' (HEADER, FORMAT 'csv'))")
只需将path/to/file部分替换为输入文件的路径和输出文件的路径。DuckDB的Copy函数docs HEADER参数将在CSV中输出标题行。如果不需要标题行,请将其删除。
DuckDB还提供了��他语言的客户端。
Pandas(Python)

扩展Uwe L. Korn的说法 - 如果你有一个大的parquet文件,并且在加载到Pandas时速度较慢,那么尝试使用Pandas的fastparquet引擎read_parquet方法

import pandas as pd
df = pd.read_parquet('filename.parquet', engine='fastparquet')
df.to_csv('filename.csv')

我发现fastparquet引擎可以大大加快读取parquet文件的速度,但效果因人而异。
使用在线工具
有时候很难通过文本编辑器打开Parquet文件来调试问题。在开发过程中,像this这样的在线工具可以帮助我们查看输出是否正确。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接