【发布时间】:2018-02-01 09:47:04
【问题描述】:
我们是否可以在 Spark 中按列进行分区,然后按另一列进行聚类?
在我的示例中,我在包含数百万行的表中有一个 month 列和一个 cust_id 列。我可以说当我将 DataFrame 保存到 hive 表以基于月份将表分区并按cust_id 聚类为 50 个文件时?
忽略cust_id的聚类,这里有三种不同的选择
df.write.partitionBy("month").saveAsTable("tbl")
df.repartition(100).write.partitionBy("month").saveAsTable("tbl")
df.repartition("month").write.saveAsTable("tbl")
第一种情况和最后一种情况在 Spark 中的作用相似,但我假设它只是在 Hive 中以不同的方式写入数据(文件夹而不是每个月的文件)。
在第二个选项中,重新分区由partitionBy 撤消不是吗?
至少我怎样才能避免这种情况?
是否甚至可以通过在 Spark 中指定多个存储桶来通过高基数列进行重新分区?
【问题讨论】:
标签: apache-spark apache-spark-sql