提问者:小点点

org.apache.spark.Spark异常:任务不可序列化(JavaSpark RDD)


目前我正在学习如何在java中使用spark,但我点击了org.apache.spark。SparkException:当我尝试类似于此示例的操作时,任务不可序列化https://spark.apache.org/docs/latest/sql-programming-guide.html#inferring-使用反射的模式

这是我的代码:

Dataset<Row> sqlDF = spark.sql("SELECT * FROM Person LIMIT 15");
Encoder<String> stringEncoder = Encoders.STRING();
Dataset<String> namesByIndexDF = sqlDF.map(new MapFunction<Row, String>() {
           @Override
           public String call(Row row) throws Exception {
               return "Name:" + row.getString(4);
           }
       }, stringEncoder);

        namesByIndexDF.show();

希望有人可以帮助我。谢谢!

我用这段代码修复:

    private static MapFunction<Row, String> mapFunc(Integer idx, String name){
        return new MapFunction<Row, String>() {
            @Override
            public String call(Row row) throws Exception {
                return name+":"+row.get(idx);
            }
        };
    }

    public void testFunc(){
        Dataset<Row> sqlDF = spark.sql("SELECT * FROM Person LIMIT 15");

        //sqlDF.show();

        Encoder<String> stringEncoder = Encoders.STRING();
        Dataset<String> namesByIndexDF = sqlDF.map(mapFunc(1, "Test"), stringEncoder);
        namesByIndexDF.show();
    }

但是有人能解释为什么我的第一个代码不工作吗?


共1个答案

匿名用户

无法评论。你能提供更多的代码吗?因为这个例子

https://github . com/Apache/spark/blob/master/examples/src/main/Java/org/Apache/spark/examples/SQL/javasparksql example . Java

工作得很好