簡體   English   中英

在 Java Spark 中收集數據集時出現 OutOfMemoryError GC 開銷限制

[英]Getting OutOfMemoryError GC overhead limit exceeded when collecting a dataset in Java Spark

我有一些大約 250MB 的數據。

我想加載數據並將其轉換為 map

class MyData implements Serializable {

    private Map<String, List<SomeObject>> myMap;

    MyData(SparkSession sparkSession, String inputPath) {

        Dataset<Klass> ds = sparkSession.read().json(inputPath).as(Encoders.bean(Klass.class));
        myMap = ds.collectAsList().stream().collect(Collectors.toMap(
                                    Klass::getField1(),
                                    Klass::getField2()
                            )
                    );
    }
}

這是我的火花執行配置

--master yarn --deploy-mode cluster --executor-cores 2 --num-executors 200 --executor-memory 10240M

將數據集轉換為列表/地圖不是一個好習慣嗎? 還是配置問題? 還是代碼問題?

看起來您將 Dataset 中的所有數據收集到 Spark 驅動程序中:

myMap = ds.collectAsList()...

因此,您應該在命令行上使用--driver-memory 2G設置驅動程序 memory (也就是您的“火花執行配置”。

此參數的默認值為1G ,這對於 250M 的原始數據可能還不夠。

暫無
暫無

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

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