我有一些大约250MB的数据。
我想加载数据并将其转换为地图
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
将数据集转换为列表/地图不是一个好习惯吗?还是配置问题?还是代码问题?
看起来您可以使用以下命令将数据集中的所有数据收集到Spark驱动程序中:
myMap = ds.collectAsList()...
因此,您应该--driver-memory 2G
在命令行上使用来设置驱动程序内存(又名“火花执行配置”)。
该参数的默认值1G
可能不足以容纳250M的原始数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句