[英]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.