2015-07-03 62 views
1

卡桑德拉2.1的選擇列表,星火1.1,火花卡桑德拉連接器1.1火花卡桑德拉連接器:按鍵

我有鑰匙,值對的非常非常高的柱族。我也有,我想從CF選擇鍵的RDD

我想要做的是一樣的東西

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。我可以從完整的tallTable中創建一個RDD,然後加入id,但這是一個非常緩慢的操作,我想避免它。

有沒有辦法像這樣讀取Cassandra中的一組鍵?

回答

1

的火花卡桑德拉連接器提供了一個優化的方法,以實現具有卡桑德拉表的連接的RDD的鍵:

// 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") 

此功能可從火花卡桑德拉連接器V1.2起所以我d建議你升級。

+0

謝謝。這不是您第一次幫助我解決Spark問題!該版本的連接器需要升級到我的Spark版本,至少1.2,是否正確?我希望推遲升級,但我認爲這足以證明它的合理性。 – Metropolis

+0

@Metropolis你也可以使用基本的java驅動程序通過分區加載密鑰。這是更多的代碼。我會說升級 - 如果可能的話 - 是更好的選擇。 – maasg

+0

謝謝。我剛剛進行了升級並測試了joinWithCassandraTable函數。一旦我確信它的工作,我接受了你的答案。 – Metropolis