Apache spark 按键聚合的最佳方式(spark/cql)
给定一个包含列的简单表 id(分区)、时间戳(集群列)和值(长) ,获取每个id的值之和的最佳方法是什么?我将尝试在查询中选择所有不同的id,然后使用此id列表为每个id运行查询 从mytable(其中id=?)中选择总和(值) 不幸的是,我不知道如何编写spark作业,我也不确定这是否是最好的方法。这就是我取得的成绩: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
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有效,您可以试试吗?我正在使用卡桑德拉连接器。明天我试试看。