簡體   English   中英

Scala Apache Spark Cassandra表列表

[英]Scala apache spark cassandra table list

我想使用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)
  }

我該怎么做?

我找到了解決方案,這是適合我的工作代碼(我有一個表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)
        }
    }
  }

您可以使用

system.schema_columnfamilies

table,它包含每個鍵空間中的表的列表。

SELECT keyspace_name, columnfamily_name FROM schema_columnfamilies;

要么

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM