假设我有一个包含一列(称为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的模式
答案 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个字段(元组/案例类的字段限制),这可能很有用