首页 > 解决方案 > Spark:识别 RDD 中每个元素的最佳方法

问题描述

我需要用唯一的 id 标识 RDD 的每个元素,因为我必须为它们中的每一个保存其 k 最近邻居的列表。然后,我想生成这样的输出:

编号 | id_neighbor1 | id_neighbor2 | ... | id_neighbork

为此,我一直在阅读名为.zipWithIndex()and的转换.zipWithUniqueID(),但在文档中说:

因此不能保证分配给每个元素的索引,如果重新评估 RDD,甚至可能会改变。

所以,我很确定我不能用它来做我想要的,对吗?因此,另一种应用我自己的 id 的方法是:

myRdd.mapPartitionsWithIndex(
  (partID, iterator) => iterator.zipWithIndex.map {
    case (labeledPoint, neighID) => (partID + "," + neighID, labeledPoint)
  },
  preservesPartitioning = true)

有什么建议么?

标签: scalaapache-spark

解决方案


推荐阅读