在不使用 case 类 的情况下从 spark 查询 cassandra table

Query cassandra table from spark without using case classes

我正在使用 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")

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

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

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

有办法克服这个问题吗?我习惯于使用 databricks-csv 将 csv 文件作为 table 获取,我可以将它们注册为 tables 和 运行 查询,而无需使用 case class 占位符,我的用例在这里有类似的东西吗?

如果有 none,如果有一些生成器可以用来自动生成这些案例 classes。

您可以直接创建数据框:

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