如何在Pyspark RDD中找到元素索引?

时间:2018-01-29 00:08:13

标签: python apache-spark indexing pyspark rdd

这是我的第一个问题。我在Pyspark编码。我有和RDD:

['a,b,c,d,e,f']

如何找到元素'e'的索引?

我尝试过zipWithIndex,但它没有给我任何索引。

我看到了类似的问题,但提到的解决方案并未将索引返回给我

rdd.zipWithIndex().filter(lambda key,index : key == 'e') \
    .map(lambda key,index : index).collect()

我收到了错误。

请告诉我如何查找索引。

基于提供的解决方案:

我还有问题。我的rdd采用以下格式:

['a,b,c,d,e,f']

所以,当我尝试:

rdd.zipWithIndex()。查找( 'E')

我得到[]

我应该如何进行

由于

1 个答案:

答案 0 :(得分:4)

你得到一个例外,因为mapfilter都期望一个参数的功能:

rdd = sc.parallelize(['a', 'b', 'c', 'd', 'e', 'f'])

(rdd
    .zipWithIndex()
    .filter(lambda ki: ki[0] == 'e')
    .map(lambda ki : ki[1]))

# [4]

在史前Python版本中,元组解包也可以工作:

(rdd
    .zipWithIndex()
    .filter(lambda (key, index): key == 'e')
    .map(lambda (key, index): index))

但我希望你不要使用其中任何一种。

就个人而言,我只会使用lookup

rdd.zipWithIndex().lookup('e')
# [4]

另外 - 请记住RDD中的值顺序可能不是确定性的。