【问题标题】:Apache Spark Count by Group Method按组方法计算 Apache Spark 计数
【发布时间】:2018-03-13 02:52:08
【问题描述】:

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

这看起来只是给了我 a 列中不同值的计数,但我更多的是在列出值和这些值的计数之后(所以 val1:10 ... val2:5 ... val3 :12 ...等等。我尝试了一些 .collect 和类似的东西;只是不确定如何在那里获得列表;任何帮助将不胜感激。

【问题讨论】:

    标签: scala apache-spark cassandra datastax


    【解决方案1】:

    下面的代码 sn-p 将获取名为“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)
    

    【讨论】:

      【解决方案2】:

      这似乎是部分答案(它提供了正确的数据,但可能有更好的解决方案)

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

      我假设有一个更好的解决方案,但这看起来在获得结果方面有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多