我有一个DataFrame
,我试图将其列为partitionBy
,按该列对其进行排序,并使用以下命令以拼花格式保存:
df.write().format("parquet")
.partitionBy("dynamic_col")
.sortBy("dynamic_col")
.save("test.parquet");
我收到以下错误:
reason: User class threw exception: org.apache.spark.sql.AnalysisException: 'save' does not support bucketing right now;
不允许save(...)
吗?
仅允许将数据保存到Hive的saveAsTable(...)
吗?
任何建议都是有帮助的。
答案 0 :(得分:6)
问题是sortBy
目前仅受saveAsTable
支持({spark 2.3.1}),并且{bucket}与sortBy
结合使用,并且bucket sorting列不应该属于分区列。
因此,您有两种选择:
请勿使用df.write
.format("parquet")
.partitionBy("dynamic_col")
.option("path", output_path)
.save()
:
sortBy
使用saveAsTable
进行存储分区,并使用df.write
.format("parquet")
.partitionBy("dynamic_col")
.bucketBy(n, bucket_col)
.sortBy(bucket_col)
.option("path", output_path)
.saveAsTable(table_name)
将其保存在元存储中:
<input type="text" id="try"/>
<input type="text" id="field11" value="777-a98;87-bx23;000-t88;245-k7"/>
<input type="text" id="msg"/>
<input type="button" id="submit"/>
答案 1 :(得分:0)
尝试
df.repartition("dynamic_col").write.partitionBy("dynamic_col").parquet("test.parquet")