wtt*_*ttt 6 scala user-defined-functions apache-spark
假设我有一个包含一列(称为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的Schema
Rap*_*oth 12
从spark 2.0开始,您可以创建返回Row/的UDF Seq[Row],但是您必须提供返回类型的模式,例如,如果您使用双精度数组:
val schema = ArrayType(DoubleType)
val myUDF = udf((s: Seq[Row]) => {
s // just pass data without modification
}, schema)
Run Code Online (Sandbox Code Playgroud)
但我真的无法想象这有用的地方,我宁愿从UDF中返回元组或案例类(或其Seq).
编辑:如果您的行包含超过22个字段(元组/案例类的字段限制)可能很有用
| 归档时间: |
|
| 查看次数: |
2245 次 |
| 最近记录: |