2015-05-26 4 views
0

Я только начинаю с разъема spark-cassandra и сталкиваюсь со следующей проблемой: у меня есть набор данных, который частично находится в cassandra, частично в HDFS (такая же точная схема). Я хотел бы создать единый UnionRDD из двух наборов и перейти оттуда.Cassandra/Parquet union RDD

кода я до сих пор выглядит следующим образом:

DataFrame df = sqlContext.parquetFile("foo.parquet"); 
JavaRDD cassandraRDD = (JavaRDD)javaFuntions(sc).cassandraTable("foo_ks","foo_table"); 
DataFrame cassandraDF = sqlContext.applySchema(cassandraRDD,df.schema()); 

Я получаю сообщение об ошибке выполнения, говоря, что CassandraRow не может быть приведена к spark.sql.Row, исходя из вызова applySchema ... который не все к удивлению. Каким будет правильный способ заставить это работать? (моей конечной целью является объединение df & cassandraDF).

Я пробовал это с помощью Spark 1.3.1 и сборки из главной ветви cassandra-spark.

+0

Если вы получаете исключение, вы сначала печатаете схему и сравниваете ее с полями cassandraRDD. – Kaushal

ответ

0

простым способом было бы написать функцию карты, которая будет принимать

  1. Cassandra Row
  2. Источник объект схемы
  3. объект Целевая схема

Эта карта функция будет

  1. Прочитайте строку cassandra, используя urce схемы (и решать вопросы, как заполнения отсутствуют колонны, подавить строки с вопросами определенных качеств данных и т.д.)
  2. Перевести CASSANDRA схему, чтобы зажечь SQL схемы (это статическое отображение B/W Кассандры типов в SQL типов)
  3. Возвращаемых объект SQL Row с целевой схемой

таким образом, вы должны быть в состоянии сделать llike

КОР = cRDD.map (C2R) .createDataFrame() // карта будет возвращать строку так не applySchema ему

В принципе, я бы предложил обрабатывать преобразование, используя одну функцию. Как только вы создадите DF из данных cassandra, вы можете объединиться с любым другим DF.

+0

Спасибо ayan - Я надеялся, что НЕ должен писать c2r вручную, так как моя строка содержит 70 полей ... которые уже введены в cassandra. Я буду отмечать ваш ответ как принятый, поскольку я не думаю, что есть более простой способ ... –

+0

Ну, вам, возможно, не нужно делать это «вручную». Вы можете открыть отдельное соединение JDBC и получить информацию о схеме из Cassandra. Тогда вы можете использовать это в c2r. Таким образом, вам не нужно будет менять код, даже если ваша схема изменится. Основная мысль: да, мы должны рассказать о схеме. Btw, новые разъемы Cassandra отсутствуют, или так я слышал. Вы можете/должны посмотреть .... –

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