web-dev-qa-db-ja.com

Spark RDDに新しい列を追加するにはどうすればよいですか?

[〜#〜] many [〜#〜]列(例:hundreds)のRDDがありますが、このRDDの最後にもう1つの列を追加するにはどうすればよいですか? ?

たとえば、私のRDDが次のような場合:

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

2番目と3番目の列の合計が値である列を追加するにはどうすればよいですか?

どうもありがとうございました。

8
Carter

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
})
9
Antot

タプル4のRDDがあり、マップを適用してタプル5に変換します

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