scala - 如何提示排序合并连接与随机散列连接(并跳过广播散列连接)?

标签 scala apache-spark apache-spark-sql

我有一个问题 join在 Spark 2.1 中。 Spark(错误地?)选择广播哈希 join尽管表非常大(1400 万行)。然后作业崩溃,因为没有足够的内存,Spark 以某种方式尝试将广播片段持久化到磁盘,然后导致超时。

所以,我知道有一个查询提示可以强制进行广播连接( org.apache.spark.sql.functions.broadcast ),但是还有一种方法可以强制使用另一种连接算法吗?

我通过设置 spark.sql.autoBroadcastJoinThreshold=0 解决了我的问题,但我更喜欢另一种更精细的解决方案,即不要全局禁用广播连接。

最佳答案

如果可以使用广播散列连接(通过广播提示或关系的总大小),Spark SQL 会选择它而不是其他连接(参见 JoinSelection 执行计划策略)。

话虽如此,不要强制广播散列连接(在左侧或右侧连接侧使用 broadcast 标准函数)或使用 spark.sql.autoBroadcastJoinThreshold 禁用广播散列连接的首选项。成为 0或消极。

关于scala - 如何提示排序合并连接与随机散列连接(并跳过广播散列连接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48145514/

相关文章:

java - 在制作过程中获取 Play Framework 中的根文件夹?

azure - 如何在 ADLS Gen2 上启动批处理作业全局提交?

apache-spark - SparkUI for pyspark - 每个阶段对应的代码行?

pyspark - 无法使用 PySpark 使用 DateType 创建字段

apache-spark - 如何向通过 Spark 创建的 View 添加注释

apache-spark - 替换深层嵌套模式 Spark Dataframe 中的值

json - Play : How to remove the fields without value from JSON and create a new JSON with them

scala - Scala 中的特征与抽象类

ajax - Lift 框架中的动态绑定(bind)

apache-spark - 避免排队 Spark 微批处理