这是我的第一个问题。我在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')
我得到[]
我应该如何进行
由于
答案 0 :(得分:4)
你得到一个例外,因为map
和filter
都期望一个参数的功能:
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中的值顺序可能不是确定性的。