创建空DF和添加列不起作用

时间:2019-04-17 11:31:45

标签: scala apache-spark apache-spark-sql

我正在尝试创建一个空的数据框并追加新列。我试图通过两个选择来做到这一点。选项A在工作,但选项B在行。请帮忙!

选项A:

`

var initialDF1 = Seq(("test")).toDF("M") 
initialDF1 = initialDF1.withColumn(("P"), lit(s"P"))
initialDF1.show
+----+---+
|   M|  P|
+----+---+
|test|  P|
+----+---+

`

选项B :(不起作用)

`

import org.apache.spark.sql.types.{StructType, StructField, StringType}
import org.apache.spark.sql.Row
val schema = StructType(List(StructField("N", StringType, true)))
var initialDF = spark.createDataFrame(sc.emptyRDD[Row], schema)
initialDF = initialDF.withColumn(("P"), lit(s"P"))
initialDF.show
+---+---+
|  N|  P|
+---+---+
+---+---+

`

1 个答案:

答案 0 :(得分:3)

它按照预期的方式工作,withColumn命令仅影响架构,并且它允许为现有记录设置值(lit或其他计算),但仅适用于现有行。在第二种情况下,您创建了一个空的数据框。 withColum对此进行迭代,并向任何现有行添加“ P”(无)。