2014-11-25 3 views
0

Использование apache-spark для обработки данных.Spark - конвертировать scala в java

Учитывая такие scala коды:

val rdd1 = sc.cassandraTable("player", "playerinfo").select("key1", "value") 
val rdd2 = rdd1.map(row => (row.getString("key1"), row.getLong("value"))) 

В основном, это скрытые в RDD '' rdd1 к другому RDD 'rdd2', но он хранит 'rdd1' в виде пары ключ-значение.

Обратите внимание, что исходные данные от cassandra и keys1 являются частью составного ключа, а значение value.

Тогда как преобразовать это в Java, так что у меня будет JavaPairRDD<String,Long> с использованием искрового Java API? У меня уже есть cassandraRowsRDD успешно создан из кодов Java ниже:

JavaRDD<String> cassandraRowsRDD = javaFunctions(sc).cassandraTable("player", "playerinfo") 
      .map(new Function<CassandraRow, String>() { 
       @Override 
       public String call(CassandraRow cassandraRow) throws Exception { 
        return cassandraRow.toString(); 
       } 
      }); 

ответ

2

CassandraJavaRDD наследует mapToPair методы. Вы можете вызвать его, чтобы получить пару RDD пары ключ-значение в Java.

JavaPairRDD<String, String> cassandraKeyValuePairs = javaFunctions(sc).cassandraTable("player", "playerinfo").mapToPair(
      new PairFunction<CassandraRow, String, String>() { 
       @Override 
       public Tuple2<String, String> call(CassandraRow row) throws Exception { 
        return new Tuple2(row.getString("key1"), row.getLong("value")); 
       } 
      } 
    ); 

Вы также можете позвонить функции на свой cassandraRowsRDD.

+0

Попытайтесь завтра, если работы, я отвечу на этот вопрос ~ – byteBiter

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