这是我的第一个问题。我在 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().lookup('e')
我得到 [ ]
我该怎么办
谢谢
最佳答案
你会得到一个异常,因为 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 中值的顺序可能不确定。
关于python - 如何在 Pyspark RDD 中查找元素的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492741/