按密钥聚合的最佳方式(spark / cql)

时间:2016-07-19 19:39:23

标签: apache-spark cassandra cql

给出一个包含列

的简单表
  

id(分区),时间戳(聚类列)和值(长)

,获得每个id的值总和的最佳方法是什么?我尝试在查询中选择所有不同的ID,然后使用此id列表为每个id运行查询

  

SELECT sum(value)FROM mytable WHERE id =?

不幸的是我无法弄清楚如何编写spark工作,我不确定这是最好的方法。这是我得到了多远:

sc.cassandraTable("mykeyspace", "mytable")
  .select("select distinct id")
  .select("select sum(value)")
  .where("id=?", ???)

我将非常感谢任何关于我应该如何进行的提示。

编辑:此处还有一个关于我目前如何进行聚合的工作示例:https://gist.github.com/Phil-Ba/72a7e762c8ab1ff1f3c9e8cff92cb223#file-cassandrasum-scala

表现虽然乏善可陈:/

1 个答案:

答案 0 :(得分:0)

这称为group by。

可以用sql实现

select sum(value) from mytable group by id

它可以通过Spark中的函数调用实现

import org.apache.spark.sql.functions._

val df = sqlContext.table("mytable")
df.groupBy("id").agg(sum($"value"))