如何测试一个值是否是RDD的键

How to test if a value is a key of an RDD

我是 Spark 和 Scala 的新手,我想测试一个值是否是来自 RDD 的键。

我的数据是这样的:

RDD data: key -> value

RDD stat: key -> statistics

我想做的是过滤掉stat中有key的data中的所有key-value对

我的大体思路是将一个RDD的key转成一个set,然后判断一个value是否属于这个set?

是否有更好的方法,以及如何使用 Scala 将 RDD 的键转换为集合?

谢谢。

您可以使用lookup

def lookup(key: K): List[V]

Return the list of values in the RDD for key key. This operation is done efficiently if the RDD has a known partitioner by only searching the partition that the key maps to.

你问 -

What I want to do is to filter all the key-value pairs in data that has the key in stat.

我认为你应该 join 按键而不是 lookup

join(otherDataset, [numTasks])

When called on datasets of type (K, V) and (K, W), returns a dataset of (K, (V, W)) pairs with all pairs of elements for each key. Outer joins are supported through leftOuterJoin, rightOuterJoin, and fullOuterJoin.

.

"close over an RDD inside another RDD."

基本上在另一个 RDD 的转换(在本例中 filter)中使用一个 RDD。 Spark 不允许将一个 RDD 嵌套在另一个 RDD 中。