我想使用Datastax和Spark获取Cassandra表中特定列(列“a”)的值和计数列表,但我无法确定执行该请求的正确方法。
我实际上是在尝试相当于一个T-SQL
SELECT a, COUNT(a)
FROM mytable
我在Cassandra上使用datastax和spark尝试了以下内容
import com.datastax.spark.connector._
import org.apache.spark.sql.cassandra._
val rdd = sc.cassandraTable("mykeyspace", "mytable").select("a")
rdd.groupBy(row => row.getString("a")).count()
这看起来只是给我一个列中不同值的计数,但是在列出值和这些值的计数之后我更多了(所以val1:10 ... val2:5 ... val3 :12 ......等等。我尝试了一些.collect和类似的东西;只是不确定如何在那里获得列表;任何帮助都将不胜感激。
答案 0 :(得分:1)
下面的代码片段将获取名为&#34的分区键; a"并使用" column_name"获取列并找到那个数量。
val cassandraPartitionKeys = List("a")
val partitionKeyRdd = sc.parallelize(cassandraPartitionKeys)
val cassandraRdd = partitionKeyRdd.joinWithCassandraTable(keyspace,table).map(x => x._2)
cassandraRdd.map(row => (row.getString("column_name"),1)).countByKey().collect.foreach(println)
答案 1 :(得分:0)
看起来这可能是一个部分答案(它提供了正确的数据,但可能有更好的解决方案)
import com.datastax.spark.connector._
import org.apache.spark.sql.cassandra._
val rdd = sc.cassandraTable("mykeyspace", "mytable").groupBy(row => row.getString("a"))
rdd.foreach{ row => { println(row._1 + " " + row._2.count(x => true)) } }
我假设有一个更好的解决方案,但这看起来在获得结果方面起作用。