Получить индекс rdd в spark

#scala #apache-spark #rdd

#scala #apache-spark #рдд #rdd

Вопрос:

У меня есть RDD RDD[Employee] , где столбцами в Employee являются id, first_name, last_name, dob Я хочу установить значение id со значением индекса RDD[Employee] . Как мне это сделать? Я могу получить индекс, используя rdd.zipWithIndex() , но я не знаю, что делать дальше.

Ответ №1:

Вам нужно сопоставить каждый элемент с новым желаемым элементом:

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

Если ваш класс Employee не является классом case или если в нем отсутствует copy метод, вы можете сделать это:

 rdd.zipWithIndex()
   .map{case(elem, index) => Employee(index.toInt, elem.first_name, elem.last_name)}
  
  • Во-первых, когда zipWithIndex вы получаете индекс для каждой строки, это
    превращает ваш RDD в кортежный RDD, где первым элементом является ваш
    сотрудник (который я назвал elem в моем примере), а второй —
    индекс
  • Затем вы можете просто создать нового сотрудника с индексом в качестве идентификатора и тем же именем и фамилией, что и у оригинала

Примечание: По умолчанию индекс, созданный методом zip, является Long , поскольку в моем классе Employee идентификатор является int , мне нужно превратить его в int . Возможно, вам это не понадобится, если ваш идентификатор уже длинный.