背景
我有 8k 个 Parquet 文件,代表我想按特定列存储的表,创建一组新的 8k Parquet 文件。我想这样做,以便来自分桶列上的其他数据集的连接不需要重新洗牌。我正在处理的文档在这里:
https://spark.apache.org/docs/latest/sql-data-sources-load-save-functions.html#bucketing-sorting-and-partitioning
问题
输出分桶的 Parquet 文件的最简单方法是什么?我想做这样的事情:
df.write()
.bucketBy(8000, "myBucketCol")
.sortBy("myBucketCol")
.format("parquet")
.save("path/to/outputDir");
但根据上面链接的文档:
Bucketing and sorting are applicable only to persistent tables
我猜我需要使用
saveAsTable
而不是 save
.然而saveAsTable
不走路径。我需要在调用 saveAsTable
之前创建一个表吗? .是在那个表创建语句中声明了应该在哪里写入 Parquet 文件吗?如果是这样,我该怎么做?
最佳答案
spark.sql("drop table if exists myTable");
spark.sql("create table myTable ("
+ "myBucketCol string, otherCol string ) "
+ "using parquet location '" + outputPath + "' "
+ "clustered by (myBucketCol) sorted by (myBucketCol) into 8000 buckets"
);
enlDf.write()
.bucketBy(8000, "myBucketCol")
.sortBy("myBucketCol")
.format("parquet")
.mode(SaveMode.Append)
.saveAsTable("myTable");
关于apache-spark - 如何在 spark 中输出分桶拼花文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56601677/