2016-08-29 28 views
0

我正在研究Cassandra的Apache Spark,Cassandra 3.7和Datastax的Java連接器。如何使用Cassandra的Java連接器從依賴列族獲取數據

這可能是完全愚蠢和幼稚的問題要問你,但我沒有得到正確的方式來從文檔

處理它,我有2個表

卡桑德拉柱族:四季

+------------------------+ 
| Id | Season | isActive | 
+------------------------+ 
| 001 | Summer | 0  | 
| 002 | Fall | 0  | 
| 003 | Spring | 1  | 
+------------------------+ 

卡桑德拉柱家庭:水果

+---------------------------+ 
| Season | Fruit Name | Id | 
+---------------------------+ 
| Summer | Fruit1  | 001 | 
| Fall | Fruit2  | 002 | 
| Spring | Fruit3  | 003 | 
| Spring | Fruit4  | 004 | 
| Summer | Fruit5  | 005 | 
+---------------------------+ 

假設這個Fruits列家族很大,所以我不想加載Spark中的所有數據。

首先,我想獲得活躍的季節,在上例中是「Spring」,然後從Fruits表中獲得該Active季節的成果,但我無法使用Datastax的Cassandra Java連接器執行此操作。這可能很簡單,但我想我錯過了一些東西,我想從你那裏得到另一種看法。

直到現在我做了以下

JavaRDD<SeasonsClass> seasons RDD = CassandraJavaUtil.javaFunctions(sc) 
      .cassandraTable(「myKeySpaceName」, "Seasons") 
      .map(SeasonsClass.getSeasonsRows()) 
      .filter(SeasonsClass.filterActiveSeasons()); 

JavaRDD<FruitsClass> fruitsRDD = CassandraJavaUtil.javaFunctions(sc) 
      .cassandraTable("myKeySpaceName", "Fruits") 
      .map(FruitsClass.getFruits()); 

但是,這使我對活躍的季節所有的水果,而不是水果。我怎樣才能得到活躍的季節水果。

我得到了活躍的季節列表,但我怎麼能得到這個活躍的季節的成果?

我使用

<dependency> 
    <groupId>com.datastax.spark</groupId> 
    <artifactId>spark-cassandra-connector_2.10</artifactId> 
    <version>1.6.0</version> 
</dependency> 
<dependency> 
    <groupId>com.datastax.spark</groupId> 
    <artifactId>spark-cassandra-connector-java_2.10</artifactId> 
    <version>1.6.0-M1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-core_2.10</artifactId> 
    <version>1.6.2</version> 
</dependency> 

任何幫助,將不勝感激。

謝謝你提前

回答

0

我認爲這可能是一個數據建模問題。爲了按季節查詢您的Fruits表,您需要指定季節列作爲您的分區鍵,並將Fruit Name指定爲您的集羣列。我認爲你不需要這個設置的ID字段,但這取決於你使用的是什麼。

+0

您好@gsteiner,我的數據模型與您所說的相同,只是我的表示在問題中發生了變化。我會糾正它。但即使做出這樣的改變,我想要的是先從季節CF獲得活躍季節,然後獲得那個活躍季節的水果。我如何以編程方式實現? - 謝謝 – Shashi

+0

你好@gsteiner,我無法構建基於活躍季節的動態獲取水果的方式。我想像MySQL那樣做,預先創建一個動態查詢,然後在需要的時候在查詢中稍後綁定所需的輸入。但是不使用查詢,我想使用Spark-Cassandra-connector-for-Java。因此,如何將活動季節與Fruits CF上的查詢綁定,以僅獲取該活動季節的水果,而不是加載完整的Fruits CF並過濾。哪個Java API支持這個?任何想法? – Shashi

+0

您可以使用Cassandra Java驅動程序,通過首先查詢季節表來查看活動季節,然後查詢水果表的哪個季節=您在第一個查詢中獲得的季節。我不知道如何用Spark連接器實現這一點,但我確信有一種方法。我還不太熟悉它。我很抱歉,我沒有回答你的問題。 – gsteiner

相關問題