我必须编写一个udf,其参数为Array [(Date,Double)](collect_list(struct(col1,col2))的结果。)
function (c) {
return function () {
var baseDF = c.cu.loadParquetDF(c.sqc, '/path', true).selectExpr('`date`', '`value`', '`svalue`');
var resDF = new (Java.type('org.apache.spark.ml.feature.SQLTransformer'))().setStatement('select date_range_build(valuePairs) from (select collect_list(struct(`date`,`value`)) as valuePairs from __THIS__)').transform(baseDF);
return resDF;
}().limit(200);
}
(1)使用以下定义时:
def DateRangeBuild(dateValuePairs: Seq[(AnyRef, Number)]) = {...}
sql.udf.register("date_range_build", TimeRangeUdfs.DateRangeBuild(_: Seq[(AnyRef, Number)]))
java.lang.ClassCastException:org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema无法转换为scala.Tuple2
(2)当我使用以下定义时:
def DateRangeBuild(dateValuePairs: GenericRowWithSchema) = {...}
sql.udf.register("date_range_build", TimeRangeUdfs.DateRangeBuild(_: GenericRowWithSchema))
java.lang.ClassCastException:scala.collection.mutable.WrappedArray $ ofRef无法转换为org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema
(3)使用以下定义时:
def DateRangeBuild(dateValuePairs: Seq[GenericRowWithSchema]) = {...}
sql.udf.register("date_range_build", TimeRangeUdfs.DateRangeBuild(_: Seq[GenericRowWithSchema]))
IDEA提示:没有类型为:Nothing,Nothing的隐式参数。
组装并运行后:
未定义函数:“ date_range_build”。此函数既不是注册的临时函数,也不是在数据库“默认”中注册的永久函数
答案 0 :(得分:0)
您的输入应为Seq[Row]
,然后在Row
上使用(Date,Double)
方法将getAs[T](...)
映射到Row