在spark 1.6中,我们可以使用cassandraSqlContext
直接对cassandra表进行查询,如下所示:
cassandraSqlContext.sql("select * from keyspace.tableName")
spark 2.1中是否有这样的功能?
我知道spark 2.1没有cassandra sql上下文,而是有一个spark会话。如果我执行spark.sql("select * from keyspace.tableName")
,它会抛出关于未解析关系或tablename不存在的错误。
但是,我可以将cassandra表注册到一个 Dataframe ,然后查询该 Dataframe 。
这是在Python 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
}
1条答案
按热度按时间o8x7eapl1#
无论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中,如上面的例子所示。