【发布时间】:2017-08-25 20:00:24
【问题描述】:
我正在使用此代码创建数据框:
val data = List(
List(444.1235D),
List(67.5335D),
List(69.5335D),
List(677.5335D),
List(47.5335D),
List(null)
)
val rdd = sparkContext.parallelize(data).map(Row.fromSeq(_))
val schema = StructType(Array(
StructField("value", DataTypes.DoubleType, true)
))
val df = sqlContext.createDataFrame(rdd, schema)
然后我将我的 udf 应用到它:
val multip: Dataset[Double] = df.select(doubleUdf(df("value"))).as[Double]
然后我尝试在这个数据集上使用 reduce:
val multipl = multip.reduce(_ * _)
结果我得到了 0.0。 我也尝试过滤掉空值
val multipl = multip.filter(_ != null).reduce(_ * _)
结果相同。 如果我从数据中删除空值,一切都会正常工作。如何使用 null 值进行 reduce 工作?
我的 udf 是这样定义的:
val doubleUdf: UserDefinedFunction = udf((v: Any) => Try(v.toString.toDouble).toOption)
【问题讨论】:
-
doubleUdf 的定义是什么。
-
@JustinPihony 我已将其添加到问题中
标签: scala apache-spark