如何使用Scala在DataFrame中添加新的可为空的String列

时间:2019-10-17 22:28:13

标签: scala apache-spark

可能至少有10个与此非常相似的问题,但我仍然没有找到明确的答案。

如何使用Scala将可为空的字符串列添加到DataFrame?我能够添加具有空值的列,但DataType显示空

val testDF = myDF.withColumn("newcolumn", when(col("UID") =!= "not", null).otherwise(null))

但是,架构显示

root
 |-- UID: string (nullable = true)
 |-- IsPartnerInd: string (nullable = true)
 |-- newcolumn: null (nullable = true)

我希望新列为字符串 |-newcolumn:string(nullable = true)

请不要将其标记为重复,除非确实是同一问题且在scala中。

2 个答案:

答案 0 :(得分:1)

只需将空文字直接转换为StringType

scala> val testDF = myDF.withColumn("newcolumn", when(col("UID") =!= "not", lit(null).cast(StringType)).otherwise(lit(null).cast(StringType)))

scala> testDF.printSchema

root
 |-- UID: string (nullable = true)
 |-- newcolumn: string (nullable = true)

答案 1 :(得分:1)

为什么要一个总是为空的列?有几种方法,我希望使用typedLit解决方案:

myDF.withColumn("newcolumn", typedLit[String](null))

或对于较旧的Spark版本:

myDF.withColumn("newcolumn",lit(null).cast(StringType))