Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在spark中输出带扣镶木地板文件?_Apache Spark_Apache Spark Sql_Parquet - Fatal编程技术网

Apache spark 如何在spark中输出带扣镶木地板文件?

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"

背景

我有一个8k拼花文件,它表示一个表,我想通过一个特定的列来创建一组新的8k拼花文件。我想这样做,这样来自Bucked列上其他数据集的联接就不需要重新洗牌。我正在使用的文档如下所示:

问题

输出带扣拼花地板文件的最简单方法是什么?我想这样做:

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");