使用dask和pyarrow数据集引擎读取spark编写的分区实木地板数据集

4ioopgfo  于 2021-07-14  发布在  Spark
关注(0)|答案(0)|浏览(282)

我想阅读spark使用dask和pyarrow数据集引擎编写的分区实木地板数据集。理想情况下,我将能够提供一个Parquet文件列表阅读。下面是一个简单的测试示例,演示了我在更大的数据集上遇到的一些错误和意外行为:
使用spark写入数据:

df = spark.createDataFrame(
[("A", 1, 4),
 ("B", 2, 5),
 ("C", 3, 6)
],["id", "col1", "col2"])

home_dir = "/home/xxx/"

df \
.write.format("parquet") \
.mode("overwrite") \
.partitionBy("id") \
.save(home_dir + "parquet_dataset")

带有pyarrow引擎和目录的dask工作:

import os
from glob import glob
import pyarrow.parquet as pq
import pyarrow.dataset as ds
import dask.dataframe as dd

dd.read_parquet(path=home_dir + "parquet_dataset", engine="pyarrow").compute()


带有文件列表的dask会删除分区列

paths = [y for x in os.walk(home_dir + "parquet_dataset") for y in glob(os.path.join(x[0],'*.parquet'))]
dd.read_parquet(path=paths, engine="pyarrow").compute()


带有pyarrow数据集引擎的dask导致错误:

dd.read_parquet(path=home_dir + "parquet_dataset", engine="pyarrow-dataset")
or
dd.read_parquet(path=paths, engine="pyarrow-dataset") # This is ideally what I am after

valueerror:列中不应存在分区。类别:['col1','col2','id']|分区:['id']
但以下pyarrow方法可以很好地工作:

pq.read_table(paths).to_pandas()
ds.dataset(source=paths, partitioning="hive", format="parquet").to_table().to_pandas()

使用dask和这种格式的Parquet、分区和使用文件列表的idealling有可能获得相同的行为吗?任何关于我做错了什么的帮助或想法都将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题