首页 > 解决方案 > 获取火花中rdd的索引

问题描述

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

标签: scalaapache-sparkrdd

解决方案


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

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

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

rdd.zipWithIndex()
   .map{case(elem, index) => Employee(index.toInt, elem.first_name, elem.last_name)}
  • 首先,随着zipWithIndex您获得每一行的索引,这会将您的 RDD 转换为元组 RDD,其中第一个元素是您的员工(在我的示例中我称之为 elem),第二个是索引
  • 然后你可以创建一个新的员工,索引为 id,名字和姓氏与原来的相同

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


推荐阅读