apache-spark - 如何在 spark 中输出分桶拼花文件?

标签 apache-spark apache-spark-sql parquet

背景

我有 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/

相关文章:

python - 如何从 Pyspark 中的日期列中减去天数列?

python-3.x - 如何在 Spark 数据帧中存储 Python 字节串

java - SQLcontext 将字符串字段更改为 Long : Spark 1. 5

python - 使用 pyarrow vs pyspark 创建的 Parquet 文件是否兼容?

java - 带有 Spark 的 Kafka 抛出无法初始化类 kafka.utils.Log4jController 错误

java - leftOuterJoin JavaPairRDD<Integer, Integer> 和 JavaPairRDD<Integer, Map<Integer, Integer>>

python Spark 替代非常大的数据爆炸

scala - 如何在Spark sql中访问HIVE ACID表?

scala - 我们可以通过保存 parquet 文件来复制 Spark 的 .cache() 行为吗?

hadoop - Presto查询引发错误-执行SELECT时StageStateMachine NullPointer *