2015-04-09 3 views
2

У меня есть данные, выглядит, как показано ниже, состоит из значений широты и долготыИтерация на данных РДД Apache Спарк

45.25,23.45 
22.15,19.35 
33.24,12.45 
15.67,21.22 

Мне нужно построить матрицу на основе евклидова расстояния между двумя точками enter image description here

как есть 4 очка, мы получим и 4x4 матрица

p1p1 p1p2 p1p3 p1p4 
p2p1 p2p2 ........ 
.................. 
..........p4p3 p4p4 

Теперь вопрос в том, как мы можем выполнить итерации в Apache Спарк 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); 
      } 
     } 

Пожалуйста, предложите подходящий способ хранения данных в РДУ и выполняющих итерации в Java API

ответ

3

В Спарк вы бы перевести это в набор преобразований и действия. Учитывая pointsRDD, содержащий данные о местоположении, то вы можете получить евклидово расстояние, как:

points.cartesian(points).map{case ((x1, y1),(x2,y2)) => math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))} 
+0

В каком формате РДД действительно будет это выше выходной код (х, у) или х, и если я хочу, чтобы вернуть RDD, как единый значения не как пары, что является преобразованием – swagath001

+0

@ swagath001 Учитывая 'RDD [(Double, Double)]' и 'f: (Double, Double) => Double' 'rdd.map (f)' будет иметь тип 'RDD [ Double] ' – maasg

+0

Я думаю, что это не связано с java API? Можете ли вы разместить логику, связанную с spark-java api – swagath001

Смежные вопросы