如何获取第n行的Spark RDD?

How to get nth row of Spark RDD?

假设我有一个任意对象的 RDD。我希望获得 RDD 的第 10(比如说)行。我该怎么做? 一种方法是使用rdd.take(n)然后访问第n个元素就是对象,但是当n很大时这种方法很慢。

我不知道它的效率如何,因为这取决于Spark引擎当前和未来的优化,但您可以尝试执行以下操作:

rdd.zipWithIndex.filter(_._2==9).map(_._1).first()

第一个函数将 RDD 转换为一对 (value, idx),其中 idx 从 0 开始。第二个函数采用 idx==9 的元素(第 10 个)。第三个函数采用原始值。然后返回结果。

first 函数可以被执行引擎拉起并影响整个处理的行为。试一试。

在任何情况下,如果 n 非常大,这种方法是有效的,因为它不需要收集数组驱动程序节点中的前 n 个元素。

我还没有检查这个庞大的数据。但对我来说效果很好。

Lets say n=2, I want to access the 2nd element,

   data.take(2).drop(1)

RDD.collect()RDD.take(x) 都是 return 列表,支持索引。所以每次我们需要位置 N.We 的元素时,可以执行以下两个代码中的任何一个: RDD.collect()[N-1] 要么 RDD.take(N)[N-1] 当我们想要位置 N.

的元素时会正常工作