У меня есть два набора данных, как показано ниже. Каждый набор данных имеет «,» разделенные номера в каждой строке.Замена значений RDD на другое
Dataset 1
1,2,0,8,0
2,0,9,0,3
Dataset 2
7, 5,4,6,3
4,9,2,1,8
Я должен заменить нули первого набора данных с соответствующими значениями из набора данных 2.
Так что результат будет выглядеть следующим образом
1,2,4,8 , 3
2,9,9,1,3
Я заменил значения с кодом ниже.
val rdd1 = sc.textFile(dataset1).flatMap(l => l.split(","))
val rdd2 = sc.textFile(dataset2).flatMap(l => l.split(","))
val result = rdd1.zip(rdd2).map(x => if(x._1 == "0") x._2 else x._1)
Выход меня имеет формат РДД [String]. Но мне нужен вывод в формате RDD [Array [String]], так как этот формат был бы более подходящим для моих дальнейших преобразований.
Вы ищете что-то вроде 'валь результат = rdd1.zip (rdd2) .map (х => если (x._1 == "0") Array (x._2) else Array (x._1)) '? –
@AlexisC. Нет. Rdd1 и rdd2 имеют тип RDD [Array [String]]. Итак, x._1 в вашем коде относится к массиву – yAsH
Ну, это не ясно из вашего фрагмента. Вы являетесь плоским отображением после расщепления, в результате получается 'RDD [String]' и выполняется 'x._1 ==" 0 "'; так как 'x._1' может ссылаться на массив? Если вы не хотите 'RDD [Array [String]]' с 2 массивами (по одному для каждой строки)? –