【问题标题】:multiple criteria for aggregation on pySpark DataframepySpark Dataframe 上聚合的多个标准
【发布时间】:2016-10-27 01:08:12
【问题描述】:

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

+-------------+----------+
|          sku|      date|
+-------------+----------+
|MLA-603526656|02/09/2016|
|MLA-603526656|01/09/2016|
|MLA-604172009|02/10/2016|
|MLA-605470584|02/09/2016|
|MLA-605502281|02/10/2016|
|MLA-605502281|02/09/2016|
+-------------+----------+

我想按 sku 分组,然后计算最小和最大日期。如果我这样做:

df_testing.groupBy('sku') \
    .agg({'date': 'min', 'date':'max'}) \
    .limit(10) \
    .show()

行为与 Pandas 相同,我只得到 skumax(date) 列。在 Pandas 中,我通常会执行以下操作以获得我想要的结果:

df_testing.groupBy('sku') \
    .agg({'day': ['min','max']}) \
    .limit(10) \
    .show()

但是在 pySpark 上这不起作用,我得到一个 java.util.ArrayList cannot be cast to java.lang.String 错误。谁能指出正确的语法?

谢谢。

【问题讨论】:

    标签: apache-spark pyspark spark-dataframe


    【解决方案1】:

    你不能使用字典。使用:

    >>> from pyspark.sql import functions as F
    >>>
    >>> df_testing.groupBy('sku').agg(F.min('date'), F.max('date'))
    

    【讨论】:

    • 谢谢!这解决了问题。最初我尝试了from pyspark.sql.functions import min, max 和您提出的方法,只是没有 F。也许 python 将 SQL 函数与本机函数混淆了。
    • 我的意思是,我不会将其称为答案,因为它不能解决必须从本质上对字典进行非规范化的问题。哦,我的错!它确实解决了最初的问题,但非规范化问题仍然存在。
    猜你喜欢
    • 2015-07-11
    • 2016-12-23
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多