nof*_*aki 6 python bucket data-partitioning apache-spark
我尝试优化两个 spark 数据帧之间的连接查询,我们称它们为 df1、df2(在公共列“SaleId”上连接)。df1 非常小(5M),所以我在火花集群的节点之间广播它。df2 非常大(200M 行),因此我尝试通过“SaleId”对其进行存储分区/重新分区。
在 Spark 中,按列对数据进行分区和按列对数据进行分桶有什么区别?
例如:
划分:
df2 = df2.repartition(10, "SaleId")
Run Code Online (Sandbox Code Playgroud)
桶:
df2.write.format('parquet').bucketBy(10, 'SaleId').mode("overwrite").saveAsTable('bucketed_table'))
Run Code Online (Sandbox Code Playgroud)
在每一项技术之后,我都将 df2 与 df1 结合使用。
我无法弄清楚使用哪种技术是正确的。谢谢
重新分区用于在同一个Spark 作业中用作操作的一部分。
bucketBy用于输出,写入。从而避免在下一个Spark 应用程序中改组,通常作为 ETL 的一部分。想想JOIN。见 https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/4861715144695760/2994977456373837/57013737/57013737/57013737st3 ,这是一个非常好的阅读。虽然目前只能由 Spark 读取 bucketBy 表。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           6352 次  |  
        
|   最近记录:  |