Python Pyspark RDD:查找元素的索引

Python Pyspark RDD:查找元素的索引,python,pyspark,Python,Pyspark,我是pyspark的新手,我正在尝试将python中的列表转换为rdd,然后我需要使用rdd查找元素索引。对于第一部分,我正在做: list = [[1,2],[1,4]] rdd = sc.parallelize(list).cache() 所以现在rdd实际上是我的列表。问题是我想找到任意元素的索引,比如“index”函数,它适用于python列表。我知道一个名为zipWithIndex的函数,它为每个元素分配索引,但我在python中找不到合适的示例(有java和scala的示例) 谢谢

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

list = [[1,2],[1,4]]
rdd = sc.parallelize(list).cache()
所以现在rdd实际上是我的列表。问题是我想找到任意元素的索引,比如“index”函数,它适用于python列表。我知道一个名为zipWithIndex的函数,它为每个元素分配索引,但我在python中找不到合适的示例(有java和scala的示例)


谢谢。

使用
过滤器和
zipWithIndex

rdd.zipWithIndex().
filter(lambda (key,index) : key == [1,2]).
map(lambda (key,index) : index).collect()
注意这里的
[1,2]
可以很容易地更改为变量名,并且整个表达式可以包装在函数中

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

filter
仅查找与特定条件匹配的项(在本例中,
key
等于特定子列表):

地图
相当明显,我们只需返回索引即可:

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

然后,如果需要,我们可以通过索引
[0]
简单地获得第一个元素。

通过任意元素,您是指任意子列表,如
[1,2]
?@AkshatMahajan是的,这就是我对记录的意思。问题是,当我向代码添加“rdd.zipWithIndex.collect()”时,它返回以下错误:“AttributeError:‘function’object没有属性‘collect’”。你——我的意思是我——忘记了一个
()
。它应该是
rdd.zipWithIndex().collect()
。还要注意collect将返回一个列表。如果你有一个真正庞大的数据集,我请求你不要做
collect
,而是在调用
collect()之前先取一个样本。)
@nimafl用更正后的代码更新了答案。感谢您捕捉到:)感谢您指出列表内容以及答案:)
rdd.zipWithIndex().filter(lambda (key,index) : key == [1,2]).collect()
> [([1, 2], 0)]
rdd.zipWithIndex().filter(lambda (key,index) : key == [1,2]).
map(lambda (key,index): index).collect()
> [0]