2017-10-02 21 views
0

DatastaxとSparkを使用してCassandraテーブルの特定の列(列「a」)の値とカウントのリストを取得したいが、実行する正しい方法を決定できないその要求。私は基本的に同等のものをやろうとしているApache Spark Count by Groupメソッド

私はこれは私を与えることになりますカサンドラ

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() 

にdatastaxと火花を使用して、次の試してみた

SELECT a, COUNT(a) 
FROM mytable 

T-SQL a列の個別の値の数ですが、値のリストとその値の数の後にはもっと多くなりました(val1:10 ... val2:5 ... val3:12 ...など)。私はいくつかの.collectなどを試してきましたが、リストをそこに取得する方法がわかりません、どんな助けもありがとうございます。

答えて

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

(よりよい解決策である可能性があり、それは正しいデータを提供していますが、)これは、部分的な答えかもしれないように思えます結果を得るためには

1

以下のコードスニペットは、 "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)