在spark 1.6中,我们可以使用cassandraSqlContext
直接查询cassandra表,如下所示:
cassandraSqlContext.sql("select * from keyspace.tableName")
火花2.1中有没有这样的功能?
我知道spark 2.1没有cassandra sql上下文,而是有一个spark会话。如果我执行spark.sql("select * from keyspace.tableName")
,则会抛出有关未解析关系的错误,或者表名不存在。
但是我可以将cassandra表注册到数据帧,然后查询数据帧。
这是查询2.1中的cassandra表的唯一方法吗?
def registerMetaDataDF(adminKeySpace: String, tableName:String): DataFrame = {
val df = sparkSession.read.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> tableName, "keyspace" -> adminKeySpace))
.load()
df
}
答案 0 :(得分:1)
无论Spark版本如何,从Spark应用程序访问Cassandra都需要spark-cassandra-connector包:
该库允许您将Cassandra表公开为Spark RDD,将Spark RDD写入Cassandra表,并在Spark应用程序中执行任意CQL查询。
所以,你的问题实际上归结为以下几点:
Spark 2.1中
cassandraSqlContext
消失了吗?
我有限的经验告诉我CassandraConnector是你可能想要看的东西:
如果您需要手动连接到Cassandra以发布一些CQL语句,此驱动程序提供了一个方便的CassandraConnector类,可以从SparkConf对象初始化并提供对Cluster和Session对象的访问。 CassandraConnector实例是可序列化的,因此可以安全地用于传递给Spark转换的lambda中,如上例所示。