从spark查询cassandra表而不使用case类

时间:2015-08-12 14:22:05

标签: scala apache-spark cassandra bigdata nosql

我正在使用datastax's connector连接到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")

现在,将此表作为RDD公开的方法是使用case类作为占位符,如下所示

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

这很好用,但我在每个表中都有大约50多列,在案例类中输入它们并识别它们的类型真的很痛苦。

有没有办法克服这个问题?我习惯使用databricks-csv将csv文件作为表格获取,我可以将它们注册为表格并在不使用案例类占位符的情况下对它们运行查询,这里有类似的用例。

如果没有,如果有一些生成器可用于自动生成这些案例类,那将会很有帮助。

1 个答案:

答案 0 :(得分:2)

您可以直接创建数据框:

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