Kan*_*ans 3 partitioning apache-spark parquet apache-spark-sql
我有一个DataFrame要尝试partitionBy插入的列,按该列对其进行排序,并使用以下命令以拼花格式保存:
df.write().format("parquet")
.partitionBy("dynamic_col")
.sortBy("dynamic_col")
.save("test.parquet");
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
reason: User class threw exception: org.apache.spark.sql.AnalysisException: 'save' does not support bucketing right now;
Run Code Online (Sandbox Code Playgroud)
是save(...)不允许的?只saveAsTable(...)允许将数据保存到Hive吗?
任何建议都是有帮助的。
问题在于,sortBy当前(Spark 2.3.1)仅与存储桶一起受支持,并且存储桶需要与存储桶结合使用saveAsTable,并且存储桶排序列不应成为分区列的一部分。
因此,您有两种选择:
不要使用sortBy:
df.write
.format("parquet")
.partitionBy("dynamic_col")
.option("path", output_path)
.save()
Run Code Online (Sandbox Code Playgroud)sortBy与存储桶配合使用,并使用saveAsTable以下命令通过metastore保存:
df.write
.format("parquet")
.partitionBy("dynamic_col")
.bucketBy(n, bucket_col)
.sortBy(bucket_col)
.option("path", output_path)
.saveAsTable(table_name)
Run Code Online (Sandbox Code Playgroud)尝试
df.repartition("dynamic_col")
.write
.partitionBy("dynamic_col")
.parquet("test.parquet")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |