在spark中获取rdd的索引

Get index of an rdd in spark

我有一个 RDD RDD[Employee],其中 Employee 中的列是 id,first_name,last_name, 多布 我想用RDD[Employee]的索引值设置id的值。我怎么做? 我可以使用 rdd.zipWithIndex() 获取索引,但我不知道下一步该怎么做。

您需要将每个元素映射到新的所需元素:

rdd.zipWithIndex()
   .map{case(elem, index) => elem.copy(id = index.toInt)}

如果您的员工 class 不是案例 class,或者如果它缺少 copy 方法,您可以这样做:

rdd.zipWithIndex()
   .map{case(elem, index) => Employee(index.toInt, elem.first_name, elem.last_name)}
  • 首先,使用 zipWithIndex 获取每一行的索引,这 将你的 RDD 变成一个元组 RDD,其中第一个元素是你的 员工(在我的例子中我称之为 elem),第二个是 指数
  • 然后你可以创建一个新的Employee,索引为id 和原来的
  • 一样的第一个和last_name

注意:默认情况下,zip 方法创建的索引是一个 Long,因为在我的 Employee class 中,id 是一个 int,我需要将它变成一个 int。如果您的 id 已经是 Long,您可能不需要这个。