如何在 Apache Spark 中将 Scala UDF 转换为 Java 版本?
Posted
技术标签:
【中文标题】如何在 Apache Spark 中将 Scala UDF 转换为 Java 版本?【英文标题】:How to convert Scala UDF's to Java version in Apache Spark? 【发布时间】:2016-02-03 11:03:21 【问题描述】:我在 scala 中写过这样的 apache spark udf:
val toLongDate = udf((t: String) => new SimpleDateFormat("dd/MM/yyyy HH:mm:ss aa").parse(t).getTime)
我想在java中这样写这个udf:
import static org.apache.spark.sql.functions.udf;
UserDefinedFunction toLongDate = udf(myFunction1, typeTag1, typeTage2);
我不知道如何将这些参数提供给org.apache.spark.sql.functions.udf
函数?
我已经编写了 myFunction1,但 IntelliJ Idea 向我显示了无法解析 compose
和 andThen
函数的错误:
【问题讨论】:
【参考方案1】:AFAIK,您无法以任何有意义的方式从 Java 中获取 TypeTag
,它是由 Scala 编译器生成的。您必须编译一些生成TypeTag
s 的Scala 代码,在这种情况下,从那里调用udf
要容易得多。
对于Function1
,答案是扩展AbstractFunction1
:
new AbstractFunction1<String, Long>()
@Override
Long apply(String x) ...
【讨论】:
以上是关于如何在 Apache Spark 中将 Scala UDF 转换为 Java 版本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Scala 中将 Spark DataFrames 一一添加到 Seq()
在 Apache Spark SQL 中将中值作为窗口函数 (UDAF) 移动
如何在 Spark Scala 中将 WrappedArray 转换为 List?
Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?