如何在Spark 2.1中直接查询Cassandra表?

cs7cruho  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(203)

在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
  }
o8x7eapl

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中,如上面的例子所示。

相关问题