gpt4 book ai didi

hadoop - (Spark) 当两个大的 rdd join 都对内存来说太大时(意味着不能使用广播),是否有任何可能的方法来优化它们?

转载 作者:可可西里 更新时间:2023-11-01 14:30:19 27 4
gpt4 key购买 nike

作为标题。

当两个大的 rdd join 都对内存来说太大时,是否有任何可能的方法来优化它们?在这种情况下,我想我们不能将广播用于 map 端连接。

如果我必须加入这两个 rdd,并且它们都太大而无法容纳在内存中:

country_rdd: 
(id, country)

income_rdd:
(id, (income, month, year))

joined_rdd = income_rdd.join(country_rdd)

有什么方法可以减少这里的洗牌吗?或者我可以做些什么来调整连接性能?

此外,joined_rdd 将仅按国家和时间进一步计算和减少,不再与 id 相关。例如:我的最终结果 = 不同国家不同年份的收入。这样做的最佳做法是什么?

我曾经考虑过做一些预分区,但似乎如果我只需要做一次加入,那不会有太大帮助吗?

最佳答案

在一般情况下(没有关键属性的先验知识)这是不可能的。 Shuffle 是 join 的重要组成部分,无法避免。

在特定情况下,您可以通过两种方式减少混洗:

  • 设计您自己的 Partitioner,它可以利用预先存在的数据分布。例如,如果您知道数据是按键排序的,则可以使用该知识来限制随机播放。
  • 如果您应用内连接,并且只有一小部分键出现在两个 RDD 中,您可以:

    • 在每个数据集上创建布隆过滤器。让我们调用这些 leftFilterrightFilter
    • 用相反的过滤器过滤 RDD(leftRDDrightFilterrightRDDleftFilter)
    • 加入过滤后的RDD

关于hadoop - (Spark) 当两个大的 rdd join 都对内存来说太大时(意味着不能使用广播),是否有任何可能的方法来优化它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45613454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com