【问题标题】:Spark UDF written in Java Lambda raises ClassCastException用 Java Lambda 编写的 Spark UDF 引发 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://stackoverflow.com/a/28367602/4164722

为什么?我该如何解决?

【问题讨论】:

  • secfree 你看过解决方案了吗?

标签: java apache-spark apache-spark-sql user-defined-functions classcastexception


【解决方案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")))

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 2022-12-09
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多