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

时间:2017-05-22 17:32:06

标签: apache-spark apache-spark-sql spark-cassandra-connector

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

1 个答案:

答案 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中,如上例所示。