【问题标题】:How to use Java connector for Cassandra to get data from dependent column families如何使用 Cassandra 的 Java 连接器从依赖列族中获取数据
【发布时间】:2017-01-05 05:51:45
【问题描述】:

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

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

我有两张桌子

Cassandra 列族:四季

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

Cassandra 列族:水果

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

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

首先,我想获取活跃季节,在上面的示例中是“春天”,然后从 Fruits 表中获取该活跃季节的果实,我无法使用 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>

任何帮助将不胜感激。

提前谢谢你

【问题讨论】:

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


    【解决方案1】:

    我认为这可能是一个数据建模问题。为了按季节查询 Fruits 表,您需要将 Season 列指定为分区键,并将 Fruit Name 指定为集群列。我认为您不需要此设置的 ID 字段,但这取决于您使用它的目的。

    【讨论】:

    • 你好@gsteiner,我的数据模型和你说的一样,只是我的表示在问题中发生了变化。我会纠正它。但即使在做出改变之后,我想要的是首先从 Seasons CF 获得活跃季节,然后获得该活跃季节的果实。我如何以编程方式实现这一目标? - 谢谢
    • 你好@gsteiner,我无法建立基于活跃季节的动态获取水果的方式。我想像 MySQL 那样做,提前创建一个动态查询,然后在需要时在查询中绑定所需的输入。但不使用查询,我想使用 Spark-Cassandra-connector-for-Java。那么如何将活跃季节与 Fruits CF 上的查询绑定以仅获取该活跃季节的水果,而不是加载完整的 Fruits CF 然后过滤。哪个 Java API 支持这个?有什么想法吗?
    • 您可以使用 Cassandra Java 驱动程序执行此操作,方法是首先查询季节表以获取活动季节,然后查询水果表,其中季节 = 您在第一个查询中获得的季节。我不确定如何使用 Spark 连接器来实​​现这一点,但我确信有办法。我只是还不太熟悉。很抱歉我没有回答你的问题。
    • 谢谢@gsteiner。我会检查你建议的方式。
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2014-04-27
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多