Apache spark 如何在spark中输出带扣镶木地板文件?
背景 我有一个8k拼花文件,它表示一个表,我想通过一个特定的列来创建一组新的8k拼花文件。我想这样做,这样来自Bucked列上其他数据集的联接就不需要重新洗牌。我正在使用的文档如下所示: 问题 输出带扣拼花地板文件的最简单方法是什么?我想这样做:Apache spark 如何在spark中输出带扣镶木地板文件?,apache-spark,apache-spark-sql,parquet,Apache Spark,Apache Spark Sql,Parquet,背景 我有一个8k拼花文件,它表示一个表,我想通过一个特定的列来创建一组新的8k拼花文件。我想这样做,这样来自Bucked列上其他数据集的联接就不需要重新洗牌。我正在使用的文档如下所示: 问题 输出带扣拼花地板文件的最简单方法是什么?我想这样做: df.write() .bucketBy(8000, "myBucketCol") .sortBy("myBucketCol") .format("parquet") .save("path/to/outputDir"
df.write()
.bucketBy(8000, "myBucketCol")
.sortBy("myBucketCol")
.format("parquet")
.save("path/to/outputDir");
但根据上面链接的文件:
Bucketing和排序仅适用于持久表
我猜我需要使用
saveAsTable
,而不是save
。但是,saveAsTable
没有路径。调用saveAsTable
之前是否需要创建表。我是不是在表创建语句中声明了拼花地板文件应该写入的位置?如果是,我该怎么做?这看起来很奇怪。您必须使用sql字符串来执行bucketing吗?
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");