用 Java Lambda 编写的 Spark UDF 引发 ClassCastException
Posted
技术标签:
【中文标题】用 Java Lambda 编写的 Spark UDF 引发 ClassCastException【英文标题】:Spark UDF written in Java Lambda raises ClassCastException 【发布时间】:2018-01-02 01:15:46 【问题描述】:这是一个例外:
java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to ... of type org.apache.spark.sql.api.java.UDF2 in instance of ...
如果我不通过 Lambda 表达式实现 UDF,没关系。喜欢:
private UDF2 funUdf = new UDF2<String, String, String>()
@Override
public String call(String a, String b) throws Exception
return fun(a, b);
;
dataset.sparkSession().udf().register("Fun", funUdf, DataTypes.StringType);
functions.callUDF("Fun", functions.col("a"), functions.col("b"));
我在本地运行,所以这个答案将 not
帮助:https://***.com/a/28367602/4164722
为什么?我该如何解决?
【问题讨论】:
secfree 你看过解决方案了吗? 【参考方案1】:这是一个可行的解决方案:
UDF1 myUDF = new UDF1<String, String>()
public String call(final String str) throws Exception
return str+"A";
;
sparkSession.udf().register("Fun", myUDF, DataTypes.StringType);
Dataset<Row> rst = sparkSession.read().format("text").load("myFile");
rst.withColumn("nameA",functions.callUDF("Fun",functions.col("name")))
【讨论】:
以上是关于用 Java Lambda 编写的 Spark UDF 引发 ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章
如何用 Java 编写 AWS Lambda 来使用查询字符串参数?
spark2.x由浅入深深到底系列六之RDD 支持java8 lambda表达式
Java+Spark 实现 flatMapToPair 的lambda函数时遇到的问题及解决方法
IDEA中打包Spark项目提示Error:(16, 48) java: -source 1.5 中不支持 lambda 表达式