如何使用Cassandra的Java连接器从依赖列系列中获取数据

时间:2016-08-29 08:55:37

标签: java apache-spark cassandra spark-cassandra-connector

我正在研究用于Cassandra的Apache Spark,Cassandra 3.7和Datastax的Java连接器。

这对你来说可能是完全愚蠢和天真的问题,但我没有从文档中处理它的正确方法

我有2张桌子

Cassandra Column Family:Seasons

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

Cassandra Column Family:水果

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

假设这个Fruits列系列很大,所以我不想在Spark中加载所有数据。

首先,我想获得活跃的季节,在上面的例子中它是“Spring”,然后从Fruits表中获得Active Season的成果,我无法使用Datastax的Java连接器为Cassandra做到这一点。这可能很简单,但我想我错过了一些东西,我想从你那里得到另一个观点。

直到现在我做了以下

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>

任何帮助将不胜感激。

提前谢谢

1 个答案:

答案 0 :(得分:0)

我认为这可能是一个数据建模问题。要按季节查询Fruits表,您需要将Season列指定为分区键,Fruit Name作为您的聚类列。我认为你不需要这个设置的ID字段,但这取决于你使用的是什么。