Spark中的分区和存储分区有什么区别?

时间:2019-07-02 17:28:50

标签: python apache-spark bucket data-partitioning

我尝试优化两个spark数据帧之间的联接查询,我们将它们称为df1,df2(在公共列“ SaleId”上联接)。 df1非常小(5M),因此我在Spark集群的节点之间广播了它。 df2非常大(200M行),因此我尝试通过“ SaleId”对其进行存储/重新分区。

在Spark中,按列划分数据和按列存储数据有什么区别?

例如:

分区:

df2 = df2.repartition(10, "SaleId")

存储桶:

df2.write.format('parquet').bucketBy(10, 'SaleId').mode("overwrite").saveAsTable('bucketed_table'))

在每种技术中,我都将df2和df1结合在一起。

我不知道哪种是最合适的技术。 谢谢

1 个答案:

答案 0 :(得分:0)

  

分区 用于在相同 Spark作业中作为Action的一部分。

     

bucketBy 用于输出,写入。因此,为了避免在 next Spark应用中改组,通常将其作为ETL的一部分。想想JOIN。   看到   https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/4861715144695760/2994977456373837/5701837197372837/latest.html   简明扼要的阅读。 bucketBy表只能读取   目前由Spark负责。