如何使用 spark java api 在 cassandra table 中进行 avg、max sum 等聚合
How to do aggragation like avg, max sum in cassandra table using spark java api
我在 cassandra 数据库中有大量数据,我想使用 spark java api
对某些列名称进行 avg、max 和 sum 等聚合
我试过如下
cassandraRowsRDD
.select("name", "age", "ann_salaray", "dept","bucket", "resourceid", "salaray")
.where("timestamp = ?", "2018-01-09 00:00:00")
.withAscOrder()
我看到这个方法 - .aggregate(zeroValue, seqOp, combOp),但不知道如何使用它
预计:
max(salary column name)
avg(salary column name)
我试过CQL,因为数据量大而失败
任何人都可以给我一个使用 spark 在 cassandra 表中进行聚合的示例 java api
第一个参数提供 so-called "zero value" 用于初始化 "accumulator",第二个参数 - 从 RDD 获取累加器和单个值的函数,第三个参数 - 函数需要 2 个累加器并将它们组合起来。
对于您的任务,您可以使用类似这样的东西 (pseudo-code)
res = rdd.aggregate((0,0,0),
(acc, value) => (acc._1 + 1,
acc._2 + value.salary,
if (acc._3 > value.salary) then acc._3 else value.salary),
(acc1, acc2) => (acc1._1 + acc2._1,
acc1._2 + acc2._2,
if (acc1._3 > acc2._3) then acc1._3 else acc2._3))
val avg = res._2/res._1
val max = res._3
在这种情况下我们有:
(0,0,0)
- 3 个元素的元组,对应地表示:RDD 中的元素数、所有薪水的总和以及最高薪水
- 从累加器和值生成新元组的函数
- 组合 2 个元组的函数
然后有了条目数、工资总额和最大值,我们就可以找到所有必要的数据。
我在 cassandra 数据库中有大量数据,我想使用 spark java api
对某些列名称进行 avg、max 和 sum 等聚合我试过如下
cassandraRowsRDD
.select("name", "age", "ann_salaray", "dept","bucket", "resourceid", "salaray")
.where("timestamp = ?", "2018-01-09 00:00:00")
.withAscOrder()
我看到这个方法 - .aggregate(zeroValue, seqOp, combOp),但不知道如何使用它
预计:
max(salary column name)
avg(salary column name)
我试过CQL,因为数据量大而失败
任何人都可以给我一个使用 spark 在 cassandra 表中进行聚合的示例 java api
第一个参数提供 so-called "zero value" 用于初始化 "accumulator",第二个参数 - 从 RDD 获取累加器和单个值的函数,第三个参数 - 函数需要 2 个累加器并将它们组合起来。
对于您的任务,您可以使用类似这样的东西 (pseudo-code)
res = rdd.aggregate((0,0,0),
(acc, value) => (acc._1 + 1,
acc._2 + value.salary,
if (acc._3 > value.salary) then acc._3 else value.salary),
(acc1, acc2) => (acc1._1 + acc2._1,
acc1._2 + acc2._2,
if (acc1._3 > acc2._3) then acc1._3 else acc2._3))
val avg = res._2/res._1
val max = res._3
在这种情况下我们有:
(0,0,0)
- 3 个元素的元组,对应地表示:RDD 中的元素数、所有薪水的总和以及最高薪水- 从累加器和值生成新元组的函数
- 组合 2 个元组的函数
然后有了条目数、工资总额和最大值,我们就可以找到所有必要的数据。