gpt4 book ai didi

java - 慢 Spark 应用程序-java

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:08 24 4
gpt4 key购买 nike

我正在尝试创建一个 Spark 应用程序,它采用 latlongtimestamp 点的数据集,并增加单元格数量(如果它们位于网格单元格内)。网格由 3d 单元组成,以 lonlattime 作为 z 轴。

现在我已经完成了应用程序,它完成了它应该做的事情,但是扫描整个数据集(~9g)需要几个小时。我的集群由 3 个节点组成,每个节点有 4 个核心,每个 8g 内存,我目前使用 6 个执行器,每个节点有 1 个核心和 2g。

我猜我可以对代码进行相当多的优化,但是我的代码中是否存在重大错误导致了这种延迟?

    //Create a JavaPairRDD with tuple elements. For each String line of lines we split the string 
//and assign latitude, longitude and timestamp of each line to sdx,sdy and sdt. Then we check if the data point of
//that line is contained in a cell of the centroids list. If it is then a new tuple is returned
//with key the latitude, Longitude and timestamp (split by ",") of that cell and value 1.

JavaPairRDD<String, Integer> pairs = lines.mapToPair(x -> {


String sdx = x.split(" ")[2];
String sdy = x.split(" ")[3];
String sdt = x.split(" ")[0];

double dx = Double.parseDouble(sdx);
double dy = Double.parseDouble(sdy);
int dt = Integer.parseInt(sdt);

List<Integer> t = brTime.getValue();
List<Point2D.Double> p = brCoo.getValue();

double dist = brDist.getValue();
int dur = brDuration.getValue();

for(int timeCounter=0; timeCounter<t.size(); timeCounter++) {
for ( int cooCounter=0; cooCounter < p.size(); cooCounter++) {

double cx = p.get(cooCounter).getX();
double cy = p.get(cooCounter).getY();
int ct = t.get(timeCounter);

String scx = Double.toString(cx);
String scy = Double.toString(cy);
String sct = Integer.toString(ct);

if (dx > (cx-dist) && dx <= (cx+dist)) {
if (dy > (cy-dist) && dy <= (cy+dist)) {
if (dt > (ct-dur) && dt <= (ct+dur)) {

return new Tuple2<String, Integer>(scx+","+scy+","+sct,1);
}
}
}
}
}
return new Tuple2<String, Integer>("Out Of Bounds",1);
});

最佳答案

尝试使用mapPartitions,速度更快,请参阅此示例链接;另一件要做的事情是将这部分代码放在循环 timeCounter 之外

关于java - 慢 Spark 应用程序-java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com