如何在 Pyspark RDD 中查找元素的索引?
Posted
技术标签:
【中文标题】如何在 Pyspark RDD 中查找元素的索引?【英文标题】:How to find the index of elements in a Pyspark RDD? 【发布时间】:2018-01-29 00:08:13 【问题描述】:这是我的第一个问题。我在 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')
我得到 [ ]
我应该怎么做
谢谢
【问题讨论】:
您需要将 rdd 的字符串拆分为分隔行,然后只应用 zipWithIndex()。那应该可以解决您的问题:) 【参考方案1】:您会得到一个异常,因为 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 中的值顺序可能不是确定性的。
【讨论】:
感谢您的帮助。我还是有问题。我的 rdd 采用这种格式: ['a,b,c,d,e,f'] 所以当我尝试时: rdd.zipWithIndex().lookup('e') 我得到 [ ] 我应该如何继续 如果你像sc.parallelize(['a,b,c,d,e,f'])
一样创建RDD
,这是一个单元素示例。我编辑了问题以显示示例输入。
好的,谢谢。但我正在研究一个数据集,其中我有 ['a,b,c,d,e,f'] 中的元素。那么我应该先拆分元素然后查找吗?以上是关于如何在 Pyspark RDD 中查找元素的索引?的主要内容,如果未能解决你的问题,请参考以下文章