【发布时间】:2017-08-13 12:52:27
【问题描述】:
我有一个格式的输入数据框
+---------------------------------+
|name| values |score |row_number|
+---------------------------------+
|A |1000 |0 |1 |
|B |947 |0 |2 |
|C |923 |1 |3 |
|D |900 |2 |4 |
|E |850 |3 |5 |
|F |800 |1 |6 |
+---------------------------------+
当 score > 0 和 row_number 0 时,我需要获取 sum(values) 和所有值的总和。
我可以通过对前 100 个值运行以下查询来实现这一点
val top_100_data = df.select(
count(when(col("score") > 0 and col("row_number")<=100, col("values"))).alias("count_100"),
sum(when(col("score") > 0 and col("row_number")<=100, col("values"))).alias("sum_filtered_100"),
sum(when(col("row_number") <=100, col(values))).alias("total_sum_100")
)
但是,我需要获取前 100,200,300 ......2500 个的数据。这意味着我需要运行此查询 25 次,最后合并 25 个数据帧。
我是 spark 新手,但我仍然在搞清楚很多事情。解决这个问题的最佳方法是什么?
谢谢!!
【问题讨论】:
标签: apache-spark apache-spark-sql apache-spark-dataset