我是pyspark的新手,我正在尝试将python中的列表转换为rdd,然后我需要使用rdd找到元素索引。对于我正在做的第一部分:
list = [[1,2],[1,4]]
rdd = sc.parallelize(list).cache()
所以现在rdd实际上是我的名单。问题是我想找到任何元素的索引,比如“index”函数,它适用于python列表。我知道一个名为zipWithIndex的函数,它为每个元素分配索引,但我在python中找不到合适的例子(有java和scala的例子)。
感谢。
答案 0 :(得分:10)
使用filter
和zipWithIndex
:
rdd.zipWithIndex().
filter(lambda (key,index) : key == [1,2]).
map(lambda (key,index) : index).collect()
请注意,此处的[1,2]
可以轻松更改为变量名称,并且整个表达式可以包含在函数中。
zipWithIndex
只返回(item
,index
)的元组,如下所示:
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]
来获取第一个元素。