and*_*bd1 5 apache-spark parquet apache-spark-sql
背景
我有 8k parquet 文件,代表一个表,我想按特定列对它进行存储,创建一组新的 8k parquet 文件。我想这样做,以便来自分桶列上其他数据集的连接不需要重新洗牌。我正在处理的文档在这里:
问题
输出分桶的镶木地板文件的最简单方法是什么?我想做这样的事情:
df.write()
.bucketBy(8000, "myBucketCol")
.sortBy("myBucketCol")
.format("parquet")
.save("path/to/outputDir");
Run Code Online (Sandbox Code Playgroud)
但根据上面链接的文档:
分桶和排序仅适用于持久化表
我猜我需要使用saveAsTable而不是save. 然而saveAsTable不走路。我需要在调用之前创建一个表吗saveAsTable?我是否在该表创建语句中声明了镶木地板文件应写入的位置?如果是这样,我该怎么做?
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");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2480 次 |
| 最近记录: |