如何向 Spark RDD 添加新列?

问题描述 投票:0回答:3

我有一个包含 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
3个回答
9
投票

您根本不必使用

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

4
投票

你有元组4的RDD,应用映射并将其转换为元组5

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

0
投票

使用pyspark

problemRdd.map(lambda line: line.split(",")).map(lambda data: data[:] + ["Y"] if int(data[1])>18 else data[::] + [“N”]).take(5)

© www.soinside.com 2019 - 2024. All rights reserved.