apache-spark - 使用 Dask 和 pyarrow-dataset 引擎读取 Spark 编写的分区 parquet 数据集
问题描述
我想读取由 Spark 使用 Dask 和 pyarrow-dataset 引擎编写的分区拼花数据集。理想情况下,我将能够提供要阅读的镶木地板文件列表。这是一个简单的测试示例,举例说明了我在更大的数据集上遇到的一些错误和意外行为:
使用 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-dataset 引擎的 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 以这种格式的镶木地板、分区和使用文件列表进行理想化来获得相同的行为?任何关于我做错了什么的帮助或想法将不胜感激。
解决方案
推荐阅读
- css - 你能让n个元素填充一个自动行网格吗
- javascript - 从ajax请求动态连接Vue中的数组不起作用
- javascript - PHP - 如何检查请求是否针对 JS 工作者
- r - 如何结合情节(mod)中的所有4个情节?(右)
- visual-studio - “Visual Studio 版本选择器”如何找到适当的 Visual Studio 可执行文件的路径?
- flutter - 不支持的操作:Platform._operatingSystem
- android - Android:如何禁用应用程序主题应用于特定视图?
- r - 从子目录复制许多文件
- node.js - 将 Parse-Dashboard 与 Parse-Server (Docker-Container) 连接起来
- python - 加速 spacy 和 csv 导出