Pyspark RDD:查找元素的索引

时间:2016-04-05 22:39:31

标签: python pyspark

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

list = [[1,2],[1,4]]
rdd = sc.parallelize(list).cache()

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

感谢。

1 个答案:

答案 0 :(得分:10)

使用filterzipWithIndex

rdd.zipWithIndex().
filter(lambda (key,index) : key == [1,2]).
map(lambda (key,index) : index).collect()

请注意,此处的[1,2]可以轻松更改为变量名称,并且整个表达式可以包含在函数中。

如何运作

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

rdd.zipWithIndex().collect()
> [([1, 2], 0), ([1, 4], 1)]

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

rdd.zipWithIndex().filter(lambda (key,index) : key == [1,2]).collect()
> [([1, 2], 0)]

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

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

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