0

我的cassandra CF具有日期和id作爲分區鍵。 查詢時我只知道日期,所以我遍歷了id的範圍。Cassandra Spark連接器

我的問題圍繞着連接器如何執行下面的代碼。

SparkDriver代碼看起來像 -

SparkConf conf = new SparkConf().setAppName("DemoApp") 
.conf.setMaster("local[*]") 
.set("spark.cassandra.connection.host", "10.*.*.*") 
.set("spark.cassandra.connection.port", "*"); 

JavaSparkContext sc = new JavaSparkContext(conf); 
SparkContextJavaFunctions javaFunctions = CassandraJavaUtil.javaFunctions(sc); 

String date = "23012017"; 

for(String id : idlist) { 

JavaRDD<CassandraRow> cassandraRowsRDD = 

javaFunctions.cassandraTable("datakeyspace", "sample2") 
      .where("date = ?",date) 
      .where("id = ? ", id) 
      .select("data"); 

cassandraRowsRDDList.add(cassandraRowsRDD); 
} 

List<CassandraRow> collectAllRows = new ArrayList<CassandraRow>(); 
     for(JavaRDD<CassandraRow> rdd : cassandraRowsRDDList){ 
      //do transformations 

      collectAllRows.addAll(rdd.collect()); 
    } 

1)所有我想在IDLIST問我是否循環首先,說IDLIST有1000元,這可能是不斷增加的,這將是有效的?每個選擇查詢如何分佈在集羣中?特別是如何維護Cassandra DB連接?

2)在我的驅動程序中循環結束後,我將所有行放入List中,然後對每行應用轉換並過濾掉重複項。這是否也會通過集羣上的火花傳播,還是會發生在駕駛員側。

請幫助。

回答

0

火花cassandra連接器提供了更好的方法。 您可以創建(日期,ID)的rdd,然後調用列date和id上的joinWithCassandraTable函數。連接器巧妙地做到了這一點,所有的數據將只由工作人員提取,而且沒有洗牌,每個工作人員只會獲取數據的日期和ID。