簡體   English   中英

Java Spark 數據集 MapFunction - 沒有任何參考 class 的任務不可序列化

[英]Java Spark Dataset MapFunction - Task not serializable without any reference to class

我有以下 class 將 csv 數據讀取到 Spark 的Dataset中。 如果我只是簡單地讀取並返回data ,一切正常。

但是,如果我在從 function 返回之前對data應用MapFunction ,我會得到

Exception in thread "main" org.apache.spark.SparkException: Task not serializable

Caused by: java.io.NotSerializableException: com.Workflow

我知道 Spark 的工作以及它需要序列化對象以進行分布式處理,但是,我沒有在我的映射邏輯中使用對Workflow class 的任何引用。 我沒有在我的映射邏輯中調用任何Workflow class function。 那么為什么 Spark 試圖序列化Workflow class 呢? 任何幫助將不勝感激。

public class Workflow {

    private final SparkSession spark;   

    public Dataset<Row> readData(){
        final StructType schema = new StructType()
            .add("text", "string", false)
            .add("category", "string", false);

        Dataset<Row> data = spark.read()
            .schema(schema)
            .csv(dataPath);

        /* 
         * works fine till here if I call
         * return data;
         */

        Dataset<Row> cleanedData = data.map(new MapFunction<Row, Row>() {
            public Row call(Row row){
                /* some mapping logic */
                return row;
            }
        }, RowEncoder.apply(schema));

        cleanedData.printSchema();
        /* .... ERROR .... */
        cleanedData.show();

        return cleanedData;
    }
}

匿名內部類具有對封閉 class 的隱藏/隱式引用。 將 Lambda 表達式或 go 與 Roma Anankin 的解決方案一起使用

你可以讓 Workflow 實現 Serializeble 和 SparkSession 作為@transient

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM