2016-08-29 2 views
0

Я изучаю Apache Spark, Cassandra 3.7 и Java-разъем Datastax для Cassandra.Как использовать Java-коннектор для Cassandra для получения данных из зависимых семейств столбцов

Это может быть совершенно глупый и наивный вопрос для вас, но я не получаю правильный способ справиться с этим из документации

У меня есть 2 таблицы

Cassandra Колонка Семья: Времена года

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

Cassandra Column Семья: Фрукты

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

Предположим, что это семейство колонок Fruits огромно, поэтому я не хочу загружать все данные в Spark.

Во-первых, я хочу получить активные сезоны, в приведенном выше примере это «Весна», а затем получить плоды этого Активного сезона из таблицы Фруктов, я не могу это сделать, используя Java-коннектор Datastax для 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> 

Любая помощь будет оценена.

Заранее спасибо

ответ

0

Я думаю, что это, вероятно, проблема моделирования данных. Чтобы запросить ваш стол Фруктов по сезону, вы захотите обозначить столбец Сезон как ваш ключ раздела, а название фрукта - как столбец кластеризации. Я не думаю, что вам понадобится поле ID для этой настройки, но это зависит от того, для чего вы используете это.

+0

Здравствуйте, @gsteiner, моя модель данных такая же, как вы говорите, только мое представление изменено в вопросе. Я исправлю это. Но даже после того, как я сделал это изменение, я хочу начать активный сезон с сезона Seasons CF, а затем получить Фрукты этого активного сезона. Как это сделать программно? - Спасибо – Shashi

+0

Здравствуйте @gsteiner, я не могу построить динамичный способ получения фруктов на основе активного сезона. Я хочу сделать это, как MySQL, создать динамический запрос заранее, а затем просто привязать требуемый ввод позже в запросе, когда это необходимо. Но не используя запросы, я хочу использовать Spark-Cassandra-connector-for-Java. Итак, как связать активный сезон с запросом на Fruits CF, чтобы получить плоды этого активного сезона, а не загружать полный Fruits CF, а затем фильтровать. Какой Java API поддерживает это? Есть идеи? – Shashi

+0

Вы можете сделать это с помощью драйвера Java Cassandra, предварительно запросив таблицу Seasons в течение активного сезона, а затем запросив таблицу фруктов, где сезон = сезон, который вы получили в первом запросе. Я не уверен, как достичь этого с помощью разъема Spark, но я уверен, что есть способ. Я еще немного не знаком с этим. Прошу прощения, я не ответил на ваш вопрос. – gsteiner

 Смежные вопросы

  • Нет связанных вопросов^_^