[英]Dataset<T> null when passing it to a MapFunction interface based class Java Spark
[英]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.