如何测试一个值是不是是 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)) datafiltered_variance 都是 RDDs 吗?如果是,那么您可以在另一个RDD关闭另一个RDD 是的,它们都是 RDD。不知道“在另一个 RDD 中关闭一个 RDD”是什么意思。

以上是关于如何测试一个值是不是是 RDD 的键的主要内容,如果未能解决你的问题,请参考以下文章

PySpark - 使用两个共享相同值的键创建对 RDD

如何测试 Spark RDD

将RDD的每一行中的键值对列表转换为每行中的单个键值

如何使用类体内的键/值创建一次映射(不是每次调用类中的函数)

获取值的键而不是获取键值? [复制]

我如何模拟没有索引的键值对列表(角度)?