【问题标题】:Best way to aggregate by key(spark/cql)按键聚合的最佳方式(spark/cql)
【发布时间】:2016-11-22 20:32:05
【问题描述】:

给定一个带有列的简单表格

id(partition), timestamp(clustering column) and value(a long)

,获取每个 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

虽然表现平平:/

【问题讨论】:

    标签: apache-spark cassandra cql


    【解决方案1】:

    这称为分组依据。

    可以用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"))
    

    【讨论】:

    • 由于 cassandra 没有内置的 goup by,这与使用 .keyBy(row => (row.getLong("id"))) 然后使用 an.aggregateByKey 不一样吗?我试过了,性能不是很好。
    • 您在使用 datastax/spark-cassandra-connector 吗?如果直接使用sql有效,您可以尝试吗? github.com/datastax/spark-cassandra-connector/blob/master/doc/…
    • 我正在使用 cassandra 连接器。明天试试 spark sql。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2015-07-18
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多