注意:这个问题与Spark有关,而不仅仅是简单的Scala或Python
由于很难解释这一点,我会展示我想要的东西。让我们说,我有一个具有以下值的RDD A
A = ["word1", "word2", "word3"]
我想要一个具有以下值的RDD
B = [(1, "word1"), (2, "word2"), (3, "word3")]
也就是说,它为每个条目提供唯一编号作为键值。我们可以用Python或Scala做这件事吗?
答案 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')]