gpt4 book ai didi

scala - 如何获取 RDD 的子集?

转载 作者:行者123 更新时间:2023-12-04 02:18:15 26 4
gpt4 key购买 nike

我是 Spark 的新手。如果我有一个由键值对组成的 RDD,返回此 RDD 的一个子集的有效方法是什么,其中包含在原始 RDD 中出现超过特定次数的键?

比如我的原始数据RDD是这样的:

val dataRDD=sc.parallelize(List((1,34),(5,3),(1,64),(3,67),(5,0)),3)

我想得到一个新的RDD,其中key在dataRDD中出现不止一次。 newRDD 应该包含这些元组:(1,34),(5,3),(1,64),(5,0)。我怎样才能得到这个新的 RDD?非常感谢。

最佳答案

计数键并过滤不频繁:

val counts = dataRDD.keys.map((_, 1)).reduceByKey(_ + _)
val infrequent = counts.filter(_._2 == 1)

如果不常见值的数量太大而无法在内存中处理,您可以使用 PairRDDFunctions.subtractByKey:

dataRDD.subtractByKey(infrequent)

否则为广播变量:

val infrequentKeysBd = sc.broadcast(infrequent.keys.collect.toSet)
dataRDD.filter{ case(k, _) => !infrequentKeysBd.value.contains(k)}

如果频繁键的数量非常少,您可以过滤频繁键并使用上面的广播变量:

val frequent = counts.filter(_._2 > 1)
val frequentKeysBd = ??? // As before
dataRDD.filter{case(k, _) => frequentKeysBd.value.contains(k)}

关于scala - 如何获取 RDD 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32772974/

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