我正在尝试使用来自X,StringBuffer的Map.entry的mapToPair函数来形成X,StringBuffer的Tuple2。 (X是用户定义的对象)代码如下:
JavaPairRDD<X, StringBuffer> d = data_obj
.mapToPair(new PairFunction<Map.Entry<X, Object>, X, StringBuffer>() {
public Tuple2<X, StringBuffer> call(Map.Entry<X, Object> S) {
Tuple2<X, StringBuffer> temp_map = null;
if (S.getValue() != null) {
StringBuffer temp = (StringBuffer) S.getValue();
temp_map = new Tuple2<X, StringBuffer>(S.getKey(), temp);
}
return temp_map;
}
});
首先,对于2.3 GB数据的输入大小,此过程大约需要8分钟。此外,在下一步,我使用reducebyKey,我得到java.lang.OutOfMemoryError。
JavaPairRDD<X, StringBuffer> Data = d.reduceByKey(new Function2<StringBuffer, StringBuffer, StringBuffer>() {
public StringBuffer call(StringBuffer s1, StringBuffer s2) {
return s1.append(s2);
}
});
我有12个节点,每个节点有64 GB内存和2 6个核心处理器。 我使用以下配置提交Spark作业:
spark-submit --class main class --master master port --deploy-mode client --conf "spark.executor.extraJavaOptions=-XX:+UseParallelGC" --driver-memory 24g --executor-memory 40g --executor-cores 1 --conf "spark.storage.memoryFraction=1" --conf "spark.core.connection.ack.wait.timeout=700" --conf "spark.yarn.executor.memoryOverhead=4096" --conf "spark.yarn.driver.memoryOverhead=8192" --conf "spark.shuffle.compress=true" <.jar> file arguments
我不知道自己做错了什么。