我需要验证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
结果:
这是我的模式,
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
它正在尝试将 Col2 String
强制转换为Double
,它在 Col2
我要实现的目标是添加一个“其他列”,说它不是要处理的有效记录。
有什么帮助吗?预先感谢。
答案 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
})