Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 按键聚合的最佳方式(spark/cql)_Apache Spark_Cassandra_Cql - Fatal编程技术网

Apache spark 按键聚合的最佳方式(spark/cql)

Apache spark 按键聚合的最佳方式(spark/cql),apache-spark,cassandra,cql,Apache Spark,Cassandra,Cql,给定一个包含列的简单表 id(分区)、时间戳(集群列)和值(长) ,获取每个id的值之和的最佳方法是什么?我将尝试在查询中选择所有不同的id,然后使用此id列表为每个id运行查询 从mytable(其中id=?)中选择总和(值) 不幸的是,我不知道如何编写spark作业,我也不确定这是否是最好的方法。这就是我取得的成绩: sc.cassandraTable("mykeyspace", "mytable") .select("select distinct id") .select("se

给定一个包含列的简单表

id(分区)、时间戳(集群列)和值(长)

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

从mytable(其中id=?)中选择总和(值)

不幸的是,我不知道如何编写spark作业,我也不确定这是否是最好的方法。这就是我取得的成绩:

sc.cassandraTable("mykeyspace", "mytable")
  .select("select distinct id")
  .select("select sum(value)")
  .where("id=?", ???)
任何关于我应该如何进行的提示都将不胜感激

编辑:这里还有一个我目前如何进行聚合的工作示例:


尽管如此,其表现还是平淡无奇的:/

这被称为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"))

这称为分组方式

它可以通过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没有内置的GoupBy,这与使用.keyBy(row=>(row.getLong(“id”))然后使用.aggregateByKey不一样吗?我试过了,但性能不是很好。您使用的是datastax/spark cassandra连接器吗?如果直接使用sql有效,您可以试试吗?我正在使用卡桑德拉连接器。明天我将尝试spark sql。既然cassandra没有内置的goup by,这是否与使用.keyBy(row=>(row.getLong(“id”))然后使用.aggregateByKey相同?我试过了,但性能不是很好。您使用的是datastax/spark cassandra连接器吗?如果直接使用sql有效,您可以试试吗?我正在使用卡桑德拉连接器。明天我试试看。