org.apache.spark.SparkException:任务不可序列化(Java Spark RDD)

时间:2017-06-01 06:11:15

标签: java apache-spark rdd

目前我学习如何在java中使用spark,但是我点击了org.apache.spark.SparkException:当我尝试类似这个例子的https://spark.apache.org/docs/latest/sql-programming-guide.html#inferring-the-schema-using-reflection时,任务不可序列化

这是我的代码:

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 个答案:

答案 0 :(得分:0)

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

  

https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/sql/JavaSparkSQLExample.java

完美无缺