pySpark Dataframe 上聚合的多个标准
Posted
技术标签:
【中文标题】pySpark Dataframe 上聚合的多个标准【英文标题】:multiple criteria for aggregation on pySpark 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 相同,我只得到 sku
和 max(date)
列。在 Pandas 中,我通常会执行以下操作以获得我想要的结果:
df_testing.groupBy('sku') \
.agg('day': ['min','max']) \
.limit(10) \
.show()
但是在 pySpark 上这不起作用,我得到一个 java.util.ArrayList cannot be cast to java.lang.String
错误。谁能指出正确的语法?
谢谢。
【问题讨论】:
【参考方案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 函数与本机函数混淆了。
我的意思是,我不会将其称为答案,因为它不能解决必须从本质上对字典进行非规范化的问题。哦,我的错!它确实解决了最初的问题,但非规范化问题仍然存在。以上是关于pySpark Dataframe 上聚合的多个标准的主要内容,如果未能解决你的问题,请参考以下文章
pyspark - 使用 RDD 进行聚合比 DataFrame 快得多
具有聚合唯一值的pyspark dataframe groupby [重复]
在 PySpark Dataframe 中结合旋转和分组聚合