#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 . Возможно, вам это не понадобится, если ваш идентификатор уже длинный.