有没有办法根据Spark中的计数创建密钥

时间:2014-11-18 16:54:55

标签: python scala bigdata apache-spark

注意:这个问题与Spark有关,而不仅仅是简单的Scala或Python

由于很难解释这一点,我会展示我想要的东西。让我们说,我有一个具有以下值的RDD A

A = ["word1", "word2", "word3"]

我想要一个具有以下值的RDD

B = [(1, "word1"), (2, "word2"), (3, "word3")]

也就是说,它为每个条目提供唯一编号作为键值。我们可以用Python或Scala做这件事吗?

2 个答案:

答案 0 :(得分:1)

如何使用zipWithIndex

  

将此RDD与其元素索引一起使用。排序首先基于分区索引,然后是每个分区内的项目顺序。因此,第一个分区中的第一个项目获得索引0,最后一个分区中的最后一个项目获得最大索引。这类似于Scala的zipWithIndex,但它使用Long而不是Int作为索引类型。当此RDD包含多个分区时,此方法需要触发spark作业。

否则,zipWithUniqueId似乎也很合适。

如果索引的顺序很重要,您始终可以在RDD上映射swap函数。

答案 1 :(得分:-1)

是的,一种方法如下:

>>> A = ["word1", "word2", "word3"]
>>> B=[(idx+1,val) for idx,val in enumerate(A)]
>>> B
[(1, 'word1'), (2, 'word2'), (3, 'word3')]