提问人:conradlee 提问时间:11/14/2023 最后编辑:conradlee 更新时间:11/15/2023 访问量:82
Python:将数据集写入为蜂巢分区和集群 parquet 文件(无 JVM)
Python: write dataset as hive-partitioned and clustered parquet files (no JVM)
问:
我想编写一个存储在类似 dataframe 的对象(例如 pandas dataframe、duckdb 表、pyarrow 表)中的表,该表采用 proom 分区和集群格式。这就是我的意思
- Hive 分区,即,我可以指定一组分区列,例如 ) 这将导致每个分区的数据被写入不同的路径,例如
(year, month, day, foo_col1)
year=2024/month=01/day=01/foo_col1=bar_val/
- 聚类(又名分桶)。我还可以指定一组聚类列,这会将具有相同值的数据并置到每个分区内 parquet 文件中的相邻行。
请注意,要实现聚类,能够按一组列对每个分区中的行进行排序也就足够了。
我可以在 spark(和 pyspark)中通过对数据帧进行排序,然后使用 parquet 写入输出并指定 partitionBy 列来做到这一点。但是,spark 是一个基于 JVM 的框架,我试图避免它。我很想使用像 或 这样的包来实现这一点,它不需要像 java 这样的外部运行时(并且通常具有较低的序列化/反序列化成本。pyarrow
pandas
duckdb
我尝试在 duckdb 中执行此操作,首先创建一个排序表,然后使用带有相关 hive paritioning 选项。这创建了一个不太正确的 hive-paritioned:在每个单独的文件中,排序似乎得到尊重,但同一 hive 分区中的所有文件都没有遵循排序。这阻止了聚类/桶提供的优化,其中聚类列的所有相同值都显示在分区内的连续行块中。COPY TO
答: 暂无答案
评论
pyarrow
pyarrow
pyarrow