DataFrame Scala上的DataType验证

时间:2019-07-01 15:50:26

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

我需要验证DataFrame的数据类型。

样本DF

val rawData = Seq((1,"First Rec Col 1" , "First Rec Col 2" ), (1,"Second Rec Col 1" , "Second Rec Col 2")).toDF("Raw_PK" ,"Col1", "Col2")

rawData.show

结果:

enter image description here

这是我的模式,

val types = Seq(("Col1", "string"), ("Col2", "double"))

它说 Col1 应该是String类型,而 Col2 应该是double

我尝试了什么?

我尝试了几种方法(传统的循环方法),但希望摆脱这种情况。这就是我所做的

val df2 = rawData.select(types.map{case (c, t) => col(c).cast(t)} : _*)
df2.show

enter image description here

它正在尝试将 Col2 String强制转换为Double,它在 Col2 null >

我要实现的目标是添加一个“其他列”,说它不是要处理的有效记录。

有什么帮助吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用此处描述的技术: https://gist.github.com/dennyglee/c21f59cf81216c1dc9a38525a0e41de1

DataType verification on DataFrame Scala

使用模式匹配:

import org.apache.spark.sql.types.IntegerType

assert(testDF.schema(col1).dataType match {
  case IntegerType => true
  case _ => false
})