【问题标题】:Spark - Group by HAVING with dataframe syntax?Spark - 通过使用数据框语法进行分组?
【发布时间】:2016-12-15 09:20:24
【问题描述】:

在没有 sql/hiveContext 的情况下,在 Spark 中使用 groupby-have 的语法是什么?我知道我能做到

DataFrame df = some_df
df.registreTempTable("df");    
df1 = sqlContext.sql("SELECT * FROM df GROUP BY col1 HAVING some stuff")

但是我如何使用像

这样的语法来做到这一点
df.select(df.col("*")).groupBy(df.col("col1")).having("some stuff")

这个.having() 似乎不存在。

【问题讨论】:

    标签: java sql apache-spark dataframe apache-spark-sql


    【解决方案1】:

    是的,它不存在。您用agg 后跟where 表达相同的逻辑:

    df.groupBy(someExpr).agg(somAgg).where(somePredicate) 
    

    【讨论】:

      【解决方案2】:

      比方说,如果我想在每个类别中查找产品,费用低于 3200 且数量不得少于 10:

      • SQL 查询:
      sqlContext.sql("select Category,count(*) as 
      count from hadoopexam where HadoopExamFee<3200  
      group by Category having count>10")
      
      • DataFrames API (Pyspark)
      from pyspark.sql.functions import *
      
      df.filter(df.HadoopExamFee<3200)
        .groupBy('Category')
        .agg(count('Category').alias('count'))
        .filter(col('count')>10)
      

      【讨论】:

      • 它不起作用,因为在 filter() 中找不到计数
      • @stanPeng - 你可能忘记运行 'from pyspark.sql.functions import *' 语句; sn-p 为我工作
      猜你喜欢
      • 2019-09-29
      • 2015-03-13
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2022-11-10
      • 2019-01-14
      • 2021-12-15
      • 2018-06-17
      相关资源
      最近更新 更多