2015-08-12 2 views
0

Я использую datastax's connector для подключения к cassandra.Запрос таблицы cassandra от искры без использования классов ящиков

Ниже приведен код, который я использовал,

import org.apache.spark.sql.SQLContext 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import com.datastax.spark.connector._ 

val sqlContext = new SQLContext(sc) 
val conf=new SparkConf(true) 
.set("spark.cassandra.connection.host","127.0.0.1") 
.set("spark.cassandra.auth.username","the_username")   
.set("spark.cassandra.auth.password","the_password") 

val sc=new SparkContext("local","the_keyspace",conf) 
val table_1 = sc.cassandraTable("the_keyspace","table_1") 
val table_2 = sc.cassandraTable("the_keyspace","table_2") 

Теперь способ разоблачить эту таблицу как РДУ является использование класса случай в качестве заполнителя, как показано ниже

case class Person(name: String, age: Int) 
sc.cassandraTable[Person](“test”, “persons”).registerAsTable(“persons”) 

это работает отлично, но у меня есть около 50 + столбцов в каждой таблице, и это настоящая боль, чтобы напечатать их в классе case, а также определить их типы.

Есть ли способ преодолеть это? Я привык получать файл csv в виде таблицы с помощью databricks-csv, и я могу зарегистрировать их в виде таблиц и запускать запросы на них без использования заполнителя case case, есть ли что-то подобное для моего варианта использования здесь.

Если их нет, было бы полезно, если бы были некоторые генераторы, которые я могу использовать для автоматического генерации этих классов случаев.

ответ

2

Вы можете создать кадр данных непосредственно:

val df = sqlContext 
    .read.format("org.apache.spark.sql.cassandra") 
    .options(Map("keyspace" -> "test", "table" -> "persons")) 
    .load() 
+1

Это, как вы должны делать все кадры данных :) Нет необходимости, чтобы пройти «registerAsTable», если вы не имеете RDD в первую очередь. – RussS

+0

Это довольно аккуратно. Но как я могу запросить это, используя Spark SQL, я попытался зарегистрировать это как временную таблицу с помощью 'df.registerTempTable', но он выдает ошибку, например метод не найден. Я знаю, что API фрейма данных быстрее, но я теперь я делаю доказательство концепции с большим количеством шаблонов запросов, и мне было бы полезно, если бы я мог использовать SQL-запросы. –

+0

Я не могу воспроизвести проблему. Какую версию Spark/Connector вы используете? – zero323

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