【问题标题】:How to find the index of elements in a Pyspark RDD?如何在 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()。那应该可以解决您的问题:)

标签: python apache-spark indexing pyspark rdd


【解决方案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'] 中的元素。那么我应该先拆分元素然后查找吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
相关资源
最近更新 更多