Spark scala数据框udf返回行

时间:2018-04-08 03:19:33

标签: scala apache-spark user-defined-functions

假设我有一个包含一列(称为colA)的数据帧,该列是行的seq。我想在每个colA记录中添加一个新字段。 (并且新的文件与前一个记录有关,所以我必须写一个udf。) 我该怎么写这个udf?

我试图编写一个udf,它将colA作为输入,并输出Seq [Row],其中每个记录包含新的字段。但问题是udf无法返回Seq [Row] /异常是' Schema for type org.apache.spark.sql.Row不支持'。 我该怎么办?

我写的udf: val convert = udf[Seq[Row], Seq[Row]](blablabla...) 例外是java.lang.UnsupportedOperationException:不支持类型为org.apache.spark.sql.Row的模式

1 个答案:

答案 0 :(得分:10)

因为spark 2.0你可以创建返回Row / Seq[Row]的UDF,但是你必须提供返回类型的模式,例如:如果你使用双打数组:

val schema = ArrayType(DoubleType)

val myUDF = udf((s: Seq[Row]) => {
  s // just pass data without modification
}, schema)

但我真的无法想象这有用的地方,我宁愿从UDF返回元组或案例类(或其Seq)。

编辑:如果你的行包含超过22个字段(元组/案例类的字段限制),这可能很有用