Pyspark RDD:查找元素的索引

aha*_*jib 4 python pyspark

我是pyspark的新手,我正在尝试将python中的列表转换为rdd,然后我需要使用rdd找到元素索引.对于我正在做的第一部分:

list = [[1,2],[1,4]]
rdd = sc.parallelize(list).cache()
Run Code Online (Sandbox Code Playgroud)

所以现在rdd实际上是我的名单.问题是我想找到任何元素的索引,比如"index"函数,它适用于python列表.我知道一个名为zipWithIndex的函数,它为每个元素分配索引,但我在python中找不到合适的例子(有java和scala的例子).

谢谢.

Aks*_*jan 12

使用filterzipWithIndex:

rdd.zipWithIndex().
filter(lambda (key,index) : key == [1,2]).
map(lambda (key,index) : index).collect()
Run Code Online (Sandbox Code Playgroud)

请注意,[1,2]这里可以很容易地更改为变量名称,并且整个表达式可以包含在函数中.

这个怎么运作

zipWithIndex只返回(item,index)的元组,如下所示:

rdd.zipWithIndex().collect()
> [([1, 2], 0), ([1, 4], 1)]
Run Code Online (Sandbox Code Playgroud)

filter只查找符合特定条件的那些(在这种情况下,key等于特定的子列表):

rdd.zipWithIndex().filter(lambda (key,index) : key == [1,2]).collect()
> [([1, 2], 0)]
Run Code Online (Sandbox Code Playgroud)

map 很明显,我们可以回到索引:

rdd.zipWithIndex().filter(lambda (key,index) : key == [1,2]).
map(lambda (key,index): index).collect()
> [0]
Run Code Online (Sandbox Code Playgroud)

然后我们可以[0]根据需要通过索引获取第一个元素.