本文介绍了使用Scala从Spark中列的一系列值中总结为一个新列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下所示的数据框

I have a dataframe like below

articles
10
99
101
101
10005
1000001
1000001

我想要输出数据框如下

range              sum
1-100              109
101-10000          202
10001-1000000      10005
1000001-100000000  2000002
...                ...

如何实现这一点.我是 Spark 和 Scala 的新手.

How to achieve this. I am new to spark and scala.

推荐答案

我建议你首先使用 when/otherwise 找到你的值的范围,然后你可以分组通过该 range 并对 articles 执行 sum 聚合:

I suggest that you first find the ranges of your values using when/otherwise then you can group by that range and perform a sum aggregation on articles :

import org.apache.spark.sql.functions._

df.withColumn("range", 
          when($"articles" >  0 and $"articles" <= 100, lit("1-100"))
            .otherwise(
              when($"articles" > 100 and $"articles" <= 10000, lit("101-10000")).otherwise(lit("others"))
            )
         ).groupBy("range").agg(sum($"articles")).orderBy("range").show

// +---------+-------------+
// |    range|sum(articles)|
// +---------+-------------+
// |    1-100|          109|
// |101-10000|          202|
// |   others|      2010007|
// +---------+-------------+

这篇关于使用Scala从Spark中列的一系列值中总结为一个新列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-31 14:39