当前位置: 首页 > 知识库问答 >
问题:

Spark中的分区和扣分有什么区别?

金钊
2023-03-14

我试图优化两个spark dataframes之间的联接查询,让我们将它们称为df1、df2(在公共列“saleid”上联接)。df1非常小(5M),所以我在spark集群的节点中广播它。df2非常大(200米行),所以我尝试通过“saleid”对它进行桶/重新分区。

例如:

分区:

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

水桶:

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

我不知道哪一个是正确的技术使用。谢谢。

共有1个答案

夏俊人
2023-03-14

重新分区用于在同一个Spark作业中作为动作的一部分使用。

bucketBy用于输出,写。从而避免在下一个Spark应用程序中洗牌,通常作为ETL的一部分。想想联接。参见https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/4861715144695760/2994977456373837/5701837197372837/latest.html,这是一个非常简洁的阅读。bucketBy表目前只能由Spark读取。

 类似资料:
  • 我知道这两个操作都是对表中的一列执行的,但每个操作有什么不同。

  • 我在这里浏览了文档:https://spark . Apache . org/docs/latest/API/python/py spark . SQL . html 它说: 重新分区:生成的DataFrame是哈希分区的 对于repartitionByRange:结果DataFrame是范围分区的 而且之前的一个问题也提到了。然而,我仍然不明白它们到底有什么不同,当选择一个而不是另一个时会有什么

  • 我试着用谷歌搜索,但找不到答案。 取自ApacheSpark:map vs mapPartitions? RDD的map和mapPartitions有什么区别 map在每个元素级别运行正在使用的函数,而mapPartitions在分区级别运行该函数。 在这种情况下,什么是元素级别?这只是一行吗?

  • 我用经纪人ID的20、21、22创建了3个Kafka经纪人设置。然后我创建了这个主题: 其结果是: 当生产者向主题zeta发送消息“Hello World”时,Kafka首先将消息写入哪个分区? 如果我有8个用户在他们自己的进程或线程中并行地运行,并订阅了zeta主题,那么Kafka如何分配分区或代理来并行地为这些用户服务?

  • 与主键、复合键和候选键相比,dynamodb中的分区键和排序键是什么?

  • 问题内容: 有太多相关的名称:早期和晚期绑定,静态和动态调度,运行时与编译时多态等,我不知道它们之间的区别。 我找到了清楚的解释,但这是正确的吗?我将解释 JustinC : 绑定: 正在确定变量的类型(对象?)。如果它是在编译时完成的,则它的早期绑定。如果在运行时完成,则绑定晚。 调度: 确定哪个方法与方法调用匹配。静态调度是在编译时计算的方法,而动态调度是在运行时执行的。 绑定是否分别将原始变