2015-04-30 12 views
5

Ich habe eine RDD mit viele Spalten (z. B. Hunderte), wie füge ich eine weitere Spalte am Ende dieser RDD?Wie füge ich einer Spark RDD eine neue Spalte hinzu?

Zum Beispiel, wenn mein RDD ist wie unten:

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

wie kann ich eine Spalte, um es hinzuzufügen, dessen Wert die Summe der zweiten und der dritten Spalte?

Vielen Dank.

+0

Beachten Sie, dass Datenrahmen unveränderlich sind. Sie können einen nicht ändern, aber Sie können einen neuen aus einem alten machen ... siehe http://stackoverflow.com/questions/29109916/updating-a-dataframe-column-in-spark – Paul

Antwort

3

Sie RDD von Tupel haben 4, anwenden Karte und wandeln es

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

Dank sb '. Ein Problem besteht darin, dass es in meinen realen Daten viele Spalten gibt (z. B. Hunderte), es ist nicht einfach, die Werte aller Spalten aufzulisten. Gibt es eine Möglichkeit, mit vielen Spalten umzugehen? – Carter

5

Sie tuple5 müssen nicht verwenden Tuple * auf alle Objekte eine neue Spalte ein RDD hinzuzufügen.

Es kann durch Abbilden jeder Zeile unter seinen ursprünglichen Inhalt und die Elemente, die Sie anhängen möchten getan werden, zum Beispiel:

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 
}) 
Verwandte Themen