ScalaApacheSparkCassandra表列表

p4rjhz4m  于 2022-11-05  发布在  Cassandra
关注(0)|答案(2)|浏览(187)

我想使用Apache Spark列出一个Cassandra数据库中的键空间表。我可以使用sc.cassandraTable("keyspace", "table")访问任何一个cassandra表,但是我不能列出一个键空间中的所有表,我想循环遍历它们。这是我的代码:

val conf = new SparkConf(true)
      .setAppName("Backup app").setMaster("local[4]")
      .set("spark.cassandra.connection.host", "XXXXX")
      .set("spark.cassandra.auth.username", "XXXX")
      .set("spark.cassandra.auth.password", "XXXXX")
      .setJars(Array("./lib/spark-cassandra-connector-assembly-2.0.2-39-g24f392d.jar"))

  val sc = new SparkContext(conf)

  sc.cassandraTable("keyspace", "userstable").select("salt").where("role = ?", "user").collect().toList.foreach {
    userkeyspace => println(userkeyspace)
  }

我该怎么做呢?

v8wbuo2f

v8wbuo2f1#

我找到了解决方案,下面是我的工作代码(我有一个表stb.users,其中存储了“salt”列下每个用户的密钥空间):

val conf = new SparkConf(true)
      .setAppName("Backup app").setMaster("local[4]")
      .set("spark.cassandra.connection.host", "XXXX")
      .set("spark.cassandra.auth.username", "XXXX")
      .set("spark.cassandra.auth.password", "XXXX")
      .setJars(Array("./lib/spark-cassandra-connector-assembly-2.0.2-39-g24f392d.jar"))

  val sc = new SparkContext(conf)
  val sqlContext = new org.apache.spark.sql.SQLContext(sc);

  CassandraConnector(conf).withSessionDo { session =>
    sc.cassandraTable("stb", "users").select("salt").where("role = ?", "user").collect().toList.foreach {
      user =>
        val userSalt = user.getString("salt")
        val iterator = session.getCluster.getMetadata.getKeyspace(userSalt).getTables().iterator()
        while(iterator.hasNext) {
          val tableName = iterator.next().getName
          println(keyspace + " " + tableName)
        }
    }
  }
sq1bmfud

sq1bmfud2#

您可以使用
系统.模式_列族
表中,它包含每个密钥空间中的表的列表。

SELECT keyspace_name, columnfamily_name FROM schema_columnfamilies;

sc.cassandraTable("system", "schema_columnfamilies").select("columnfamily_name").where("keyspace_name = ?", "the_keyspace")

相关问题