开发者社区> 问答> 正文

使用pyspark进行条件聚合

将以下内容视为数据框架

a b c d e
africa 123 1 10 121.2
africa 123 1 10 321.98
africa 123 2 12 43.92
africa 124 2 12 43.92
usa 121 1 12 825.32
usa 121 1 12 89.78
usa 123 2 10 32.24
usa 123 5 21 43.92
canada 132 2 13 63.21
canada 132 2 13 89.23
canada 132 3 21 85.32
canada 131 3 10 43.92
现在我想使用数据帧将以下case语句转换为PYSPARK中的等效语句。

我们可以直接在case语句中使用hivecontex / sqlcontest来寻找传统的pyspark nql查询

select
case

when c <=10 then sum(e)
when c between 10 and 20 then avg(e)

else 0.00 end
from table
group by a,b,c,d

展开
收起
社区小助手 2018-12-10 16:33:45 1990 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    可以将SQL代码直接转换为DataFrame基元:

    from pyspark.sql.functions import when, sum, avg, col

    (df

    .groupBy("a", "b", "c", "d")  # group by a,b,c,d
    .agg(  # select 
        when(col("c") < 10, sum("e"))  #  when c <=10 then sum(e)
            .when(col("c").between(10 ,20), avg("c"))  # when c between 10 and 20 then avg(e)
            .otherwise(0))   # else 0.00
    2019-07-17 23:19:24
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spark介绍及Spark多数据源分析 立即下载
LEARNINGS USING SPARK STREAMING & DATAFRAMES FOR WALMART SEARCH 立即下载
SparkSQL实践与优化 立即下载