2015-04-30 1 views
5

У меня есть RDD с МНОГИЕ столбцы (например, сотни), как добавить еще один столбец в конце этого RDD?Как добавить новый столбец в Spark RDD?

Например, если мой РДД, как показано ниже:

123, 523, 534, ..., 893 
    536, 98, 1623, ..., 98472 
    537, 89, 83640, ..., 9265 
    7297, 98364, 9, ..., 735 
    ...... 
    29, 94, 956, ..., 758 

, как я могу добавить столбец к нему, значение которого сумма второго и третьего столбцов?

спасибо.

+0

Обратите внимание, что dataframes неизменны. Вы не можете изменить его, но вы можете создать новый из старого ... см. Http://stackoverflow.com/questions/29109916/updating-a-dataframe-column-in-spark – Paul

ответ

3

у вас есть RDD из кортежа 4, применить карту и преобразовать его в tuple5

val rddTuple4RDD = ........... 
val rddTuple5RDD = rddTuple4RDD.map(r=> Tuple5(rddTuple4._1, rddTuple4._2, rddTuple4._3, rddTuple4._4, rddTuple4._2 + rddTuple4._3)) 
+3

Спасибо sb '. Одна из проблем заключается в том, что в моих реальных данных имеется много столбцов (например, сотни), непросто перечислять значения всех столбцов. Есть ли способ обработки многих столбцов? – Carter

5

Вы не должны использовать Tuple * объекты на всех для добавления нового столбца в RDD.

Это может быть сделано путем сопоставления каждой строки, принимая исходное содержание плюс элементы, которые вы хотите добавить, например:

val rdd = ... 
val withAppendedColumnsRdd = rdd.map(row => { 
    val originalColumns = row.toSeq.toList 
    val secondColValue = originalColumns(1).asInstanceOf[Int] 
    val thirdColValue = originalColumns(2).asInstanceOf[Int] 
    val newColumnValue = secondColValue + thirdColValue 
    Row.fromSeq(originalColumns :+ newColumnValue) 
    // Row.fromSeq(originalColumns ++ List(newColumnValue1, newColumnValue2, ...)) // or add several new columns 
})