2016-12-05 6 views
0

У меня есть набор данных, который я буду читать из файла, как,Карта для формирования ключа/пары значений в реализации свече в Java

1 2 3 4 5:9:3 2 1 2 1 
2 3 5:4:1 2 1 
4 5:3:1 2 

Я пытаюсь разделить их с каждой строки, а затем создать ключ/значение с левой частью colon с соответствующей правой частью colon. Например, в первой строке 1 отображается с 3, чтобы стать (1,3), а 2 сопоставляется с 2, чтобы стать (2,2). Аналогично, для первой линии будет (3,1), (4,2), (5,1). Точно так же он должен генерировать для 2-й строки и 3-й строки.

Я попытался разделить каждую строку до сих пор с помощью функции карты, а затем я пытаюсь создать кортеж, сопоставляя каждый элемент левой части с соответствующим значением правой части.

код до сих пор:

JavaRDD<List<String>> transactions = data.map(
       new Function<String, List<String>>() { 
        public List<String> call(String line) { 
         String[] parts = line.split(" "); 
         return Arrays.asList(parts); 
        } 
       } 
     ); 

    JavaPairRDD<String, Integer> ones = transactions.mapToPair(
       new PairFunction<List<String>, String, Integer>() { 
        public Tuple2<String, Integer> call(List<String> w) { 

         return new Tuple2<String, Integer>....; 
        } 
       }); 

Я ударил по обратной части. Есть ли способ получить все пары ключ/значение?

PS: Я новичок в искры apache.

ответ

1

Вы можете использовать flatmap для относительно более элегантное решение:

val res = dataset.flatMap(line => { 
    val f = line.split(":", -1) //taking care of the empty values with -1 
    val keys = f(0).split(" ", -1) 
    val values = f(2).split(" ", -1) 
    keys.zip(values) //List[(String, String)], (key, value) pairs for a line 
}) 

res.collect.map(println) 

(1,3) 
(2,2) 
(3,1) 
(4,2) 
(5,1) 
(2,1) 
(3,2) 
(5,1) 
(4,1) 
(5,2) 
+0

Спасибо за помощь! :) Теперь нужно преобразовать этот код scala в Java. – ashish

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

  • Нет связанных вопросов^_^