在Spark Scala中添加具有初始值的新列

时间:2018-03-22 11:34:13

标签: apache-spark apache-spark-sql spark-dataframe

输入数据:

col1
-----
123400
123400
123400
123400
123400

预期产出:

col1   | col2
------------------
123400 |123401
123400 |123402
123400 |123403
123400 |123404
123400 |123405

谢谢, 希瓦

1 个答案:

答案 0 :(得分:0)

您可以使用zipWithIndex,初始值为123401

val df = Seq(123400, 123400, 123400, 123400, 123400).toDF("col1")

val newDF = df.rdd.zipWithIndex().map { case (v, ind) =>
  (v.getInt(0), ind + 123401)
}
.toDF("col1", "col2")

newDF.show(false)

或者,如果您有许多其他列并且想要通用解决方案,那么您可以使用相同的方式使用模式重新构建数据帧

val df2 = spark.sqlContext.createDataFrame(
  df.rdd.zipWithIndex.map {
    case (row, index) => Row.fromSeq(row.toSeq :+ index + 123401)
  },
  // Create schema for index column
  StructType(df.schema.fields :+ StructField("col2", LongType, false)))

df2.show(false)

输出:

+------+------+
|col1  |index |
+------+------+
|123400|123401|
|123400|123402|
|123400|123403|
|123400|123404|
|123400|123405|
+------+------+

希望这有帮助!