Parquet 与 Dask/Pandas 和 Pyspark 的兼容性

Parquet compatibility with Dask/Pandas and Pyspark

这是与 相同的问题,但已接受的答案对我不起作用。

尝试: 我尝试以 parquet 格式保存一个 dask 数据框并用 spark 读取它。

问题:pyspark无法解释时间戳列

我做了什么:

我尝试使用

将 hfds 中的 Dask 数据帧保存为镶木地板
import dask.dataframe as dd
dd.to_parquet(ddf_param_logs, 'hdfs:///user/<myuser>/<filename>', engine='pyarrow', flavor='spark')

然后我用pyspark读取文件:

sdf = spark.read.parquet('hdfs:///user/<myuser>/<filename>')
sdf.show()

>>>  org.apache.spark.sql.execution.QueryExecutionException: Parquet column cannot be converted in file hdfs://nameservice1/user/<user>/<filename>/part.0.parquet. Column: [utc_timestamp], Expected: bigint, Found: INT96

但是如果我用

保存数据帧
dd.to_parquet(ddf_param_logs, 'hdfs:///user/<myuser>/<filename>', engine='pyarrow', use_deprecated_int96_timestamps=True)

utc时间戳列包含unix格式的时间戳信息(1578642290403000)

这是我的环境:

dask==2.9.0
dask-core==2.9.0
pandas==0.23.4
pyarrow==0.15.1
pyspark==2.4.3

明确包含 INT96 类型是为了与 spark 兼容,spark 选择不使用 parquet 规范定义的标准时间类型。不幸的是,他们似乎又变了,不再使用他们以前的标准,而不是镶木地板。

如果您能在这里找到 spark 想要的类型,并且 post 向 dask 回购提出问题,我们将不胜感激。您可能希望从包含时间列的 spark 中输出数据,并查看其最终格式。

您是否也尝试过 fastparquet 后端?