如何测试一个值是不是是 RDD 的键
Posted
技术标签:
【中文标题】如何测试一个值是不是是 RDD 的键【英文标题】:How to test if a value is a key of an RDD如何测试一个值是否是 RDD 的键 【发布时间】:2015-01-12 15:26:22 【问题描述】:我是 Spark 和 Scala 的新手,我想测试一个值是否是来自 RDD 的键。
我的数据是这样的:
RDD 数据:键 -> 值
RDD stat: key -> 统计数据
我要做的是过滤数据中所有键值对,其中键在 stat 中。
我的总体思路是将一个RDD的keys转换成一个set,然后测试一个value是否属于这个set?
是否有更好的方法,以及如何使用 Scala 将 RDD 的键转换为集合?
谢谢。
【问题讨论】:
【参考方案1】:您可以使用lookup
def lookup(key: K): List[V]
返回 RDD 中键 key 的值列表。这个操作是 如果 RDD 有一个已知的分区器,则只需搜索即可有效地完成 键映射到的分区。
你问了 -
我想要做的是过滤数据中的所有键值对 有 stat 中的键。
我认为你应该通过键 join
而不是 lookup
。
join(otherDataset, [numTasks])
在 (K, V) 和 (K, W) 类型的数据集上调用时,返回一个数据集 (K, (V, W)) 对与每个键的所有元素对。外 通过 leftOuterJoin、rightOuterJoin 和 全外连接。
.
“在另一个 RDD 中关闭一个 RDD。”
基本上在另一个 RDD 的转换(在本例中为 filter
)中使用 RDD。
Spark 中不允许将一个 RDD 嵌套在另一个 RDD 中。
【讨论】:
谢谢,但我在运行时收到了很多错误消息:val filters_data = data.filter(x => (filtered_variance.lookup(x._1).size > 0))data
和 filtered_variance
都是 RDD
s 吗?如果是,那么您可以在另一个RDD
内关闭另一个RDD
。
是的,它们都是 RDD。不知道“在另一个 RDD 中关闭一个 RDD”是什么意思。以上是关于如何测试一个值是不是是 RDD 的键的主要内容,如果未能解决你的问题,请参考以下文章