【问题标题】:How to add a new column to a Spark RDD?如何向 Spark RDD 添加新列?
【发布时间】:2015-07-09 21:11:45
【问题描述】:

我有一个包含 MANY 列的 RDD(例如,数百个),如何在此 RDD 的末尾再添加一列?

例如,如果我的 RDD 如下所示:

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

如何向其中添加一列,其值为第二列和第三列之和?

非常感谢。

【问题讨论】:

标签: apache-spark rdd


【解决方案1】:

您根本不必使用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
})

【讨论】:

    【解决方案2】:

    您有 tuple 4 的 RDD,应用 map 并将其转换为 tuple5

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

    【讨论】:

    • 谢谢某人。一个问题是,在我的真实数据中,有很多列(例如,数百个),很难枚举所有列的值。有没有办法处理多列?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2016-08-27
    • 2020-09-12
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多