我的数据如下所示,包含纬度和经度值
45.25,23.45
22.15,19.35
33.24,12.45
15.67,21.22
我需要根据两点之间的欧几里德距离构造一个矩阵
因为有4个点,我们将获得4x4矩阵
p1p1 p1p2 p1p3 p1p4
p2p1 p2p2 ........
..................
..........p4p3 p4p4
现在的问题是我们如何在Apache Spark java中执行迭代(如下面的代码,在java中实现)
int nrows = latit.size();
int ncols = longit.size();
double[][] w = new double[nrows][ncols];
for(int i=0;i<nrows;i++) {
for(int j=0;j<ncols;j++) {
temp1 = latit.get(i) - latit.get(j);
temp2 = longit.get(i) - longit.get(j);
temp3 = Math.pow(temp1, 2) + Math.pow(temp2, 2);
w[i][j] = Math.sqrt(temp3);
}
}
请建议将数据存储到RDD并在Java API中执行迭代的合适方法
答案 0 :(得分:3)
在Spark中,您可以将其转换为一组转换和操作。
如果pointsRDD
包含位置数据,那么您可以获得欧几里德距离:
points.cartesian(points).map{case ((x1, y1),(x2,y2)) => math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))}