[英]Java Spark - java.lang.OutOfMemoryError: GC overhead limit exceeded - Large Dataset
[英]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.