我是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
使用filter和zipWithIndex:
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]根据需要通过索引获取第一个元素.