2015-07-03 2 views
1

Cassandra 2.1, 1.1 Спарк, искровая Cassandra-разъем 1,1разъем искровой Cassandra: выбрать список ключей

У меня есть очень очень высокая колонна Семейство ключевых, пар значений. И у меня также есть RDD ключей, которые я хотел бы, чтобы выбрать из этого CF

То, что я хотел бы сделать что-то вроде

import com.datastax.spark.connector._          
val ids = ... 

val pairs = id.map{ 
id => sc.cassandraTable("cf", "tallTable") 
     .select("the_key". "the_val") 
     .where("the_key = ?", id) 
} 

Однако, ссылаясь на искровом контексте на карте вызывает NPE. Я мог бы сделать RDD из полного tallTable, а затем присоединиться к идентификаторам, однако это очень медленная операция, и я бы хотел ее избежать.

Есть ли способ прочитать набор ключей от Кассандры, как это?

ответ

1

Соединитель искровой Cassandra предлагает оптимизированный способ реализовать объединение РРЫ ключей с Кассандрой таблицей:

// Given a collection of ids 
val ids = Seq(id,...) 
// Make an RDD out of it 
val idRdd = sc.parallelize(ids) 
// join the ids with the cassandra table to obtain the data specific to those ids 
val data = idRDD.joinWithCassandraTable("cf", "tallTable") 

Этой функция доступна от искрового CASSANDRA разъема v1.2 и далее так что я Рекомендуем обновить.

+0

Спасибо. Это не первый случай, когда вы помогли мне с вопросом Spark! Для этой версии соединителя потребуется обновление до моей версии Spark, по крайней мере, до 1,2, правильно? Я надеялся отложить модернизацию, но я полагаю, что это является достаточным основанием для его оправдания. – Metropolis

+0

@Metropolis, вы также можете использовать драйвер java для bare-bones для загрузки ключей по разделам. Это больше кода. Я бы сказал, что обновление - если возможно - лучший вариант. – maasg

+0

спасибо. Я только что получил обновление на месте и протестировал функцию joinWithCassandraTable. Как только я убедился, что это сработало, я принял ваш ответ. – Metropolis

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