【发布时间】:2015-11-18 14:30:25
【问题描述】:
令 x 为定义为(在 Scala 中)的两列字符串的数据框
case class Pair(X: String, Y: String)
val x = sqlContext.createDataFrame(Seq(
Pair("u1", "1"),
Pair("u2", "wrong value"),
Pair("u3", "5"),
Pair("u4", "2")
))
我想清理这个数据框,使第二列的每个值都是
- 如果可能,转换为 Int
- 替换为 null、Na 或任何表示“缺失值”的符号(不是 NaN,这是不同的)
我正在考虑使用 udf 函数
val stringToInt = udf[Int, String](x => try {
x.toInt
} catch {
case e: Exception => null
})
x.withColumn("Y", stringToInt(x("Y")))
... 但是 null 不是字符串,编译器会拒绝它。请问,有什么办法解决吗?只要我可以清理我的数据框,完全不同的方法也可以
【问题讨论】:
-
注意 val x = sqlContext.createDataFrame(Seq(Pair("u1", "a1"), Pair("u1", "a2"), Pair("u2", "a1" ), Pair("u2", null))) 返回一个由两列字符串组成的数据框,其中包含一个空值,我们可以使用 x.na.drop 等标准工具
标签: scala apache-spark dataframe user-defined-functions missing-data