如何将具有bucketBy/sortkey值的parquet文件保存到s3中?
问题描述:
它看起来像这样就会因错误如何将具有bucketBy/sortkey值的parquet文件保存到s3中?
df
.write()
.option("mode", "DROPMALFORMED")
.option("compression", "snappy")
.mode("overwrite")
.bucketBy(32,"column").sortBy("column")
.parquet("s3://....");
有了错误
Exception in thread "main" org.apache.spark.sql.AnalysisException: 'save' does not support bucketing right now; at org.apache.spark.sql.DataFrameWriter.assertNotBucketed(DataFrameWriter.scala:314)
我看到saveAsTable("myfile")
仍然支持,但是它只能在本地写道。在作业完成后,我会如何将saveAsTable(...)
输出放到s3上?
答
You Can use like below:
df
.write()
.option("mode", "DROPMALFORMED")
.option("compression", "snappy")
.option("path","s3://....")
.mode("overwrite")
.format("parquet")
.bucketBy(32,"column").sortBy("column")
.saveAsTable("tableName");
这将创建一个外部表指向S3位置 。选项(“路径”,“S3:// ......”)是这里的渔获
你有没有考虑使用'再分配(32)'''partitionBy(“column”)'? –
Parition by通过为每个列创建一个新文件,bucket通过创建一个散列键并均匀分布在N个桶中。他们做不同的事情。在我的情况下,我想要存储的列是用户ID,这是唯一的。我真正想要的是bucketby提供的sortkey/index。 – ForeverConfused