如何在 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】:

您会得到一个异常,因为 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 中的值顺序可能不是确定性的。

【讨论】:

感谢您的帮助。我还是有问题。我的 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 中查找元素的索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 中的 RDD 中的列中查找标准差

如何删除元素如何根据另一个rdd从一个rdd中删除元素并在pyspark中创建新的rdd?

如何在pyspark中广播一个巨大的rdd?

如何在 PySpark 中获得不同的字典 RDD?

将 RDD 行拆分到 Pyspark 中的不同列

如何从单元素集到双元素集对 rdd-pyspark 中的元素进行分组