【问题标题】:pyspark - difference between select and aggpyspark - select 和 agg 之间的区别
【发布时间】:2020-09-30 04:02:18
【问题描述】:

下面两个有什么区别-

df.select(min("salary")).show()

df.agg({'salary':'min'}).show()

还有,这两者有什么区别-

df.groupBy("department").agg({'salary':'min'}).show()

df.groupBy("Company").min('salary').show()

【问题讨论】:

    标签: select pyspark group-by aggregate


    【解决方案1】:

    在 Spark 中,有许多不同的方法可以编写相同的内容。这主要取决于您更喜欢 SQL 编写还是 python 编写。

    df.select(min("salary")) 相当于 SQL:

    select min(salary) from df
    

    此查询在没有任何 group by 子句的情况下计算列 salary 的最小值。 相当于

    from pyspark.sql import functions as F
    
    df.groupBy().agg(F.min("salary"))
    
    # OR
    
    df.groupBy().agg({'salary':'min'})
    

    如您所见,groupBy 为空,因此您不按任何内容进行分组。 Python还可以解释字典{'salary':'min'},它相当于函数F.min("salary")

    方法agg 依赖于对象。应用于Dataframe,它相当于df.groupBy().aggagg 也是对象GroupedData 的一个方法,它是在您执行df.groupBy() 时创建的。我添加了官方文档的链接,您可以在其中看到两种方法之间的区别。

    df.groupBy("department").agg({'salary':'min'})时,可以在agg方法中指定几个不同的聚合。仅使用min 时,您只能使用一列。例如,您可以这样做:

    from pyspark.sql import functions as F 
    
    df.groupBy("department").agg(F.min("salary"), F.max("age"))
    
    # OR
    
    df.groupBy("department").agg({'salary':'min', 'age':'max'})
    
    # But you cannot do 
    
    df.groupBy("department").min("salary").max("age")
    >> AttributeError: 'DataFrame' object has no attribute 'max'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2019-08-07
      • 2015-04-02
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多