apachespark:groupby未按预期工作

k5hmc34c  于 2021-05-29  发布在  Spark
关注(0)|答案(4)|浏览(428)

测向

Date          Col1   COl2
  2010-01-01     23     28
  2012-09-01     50     70
  2010-03-04     80     10
  2012-04-01     19      20
  2012-03-05     67      9

  df_new=df.withColumn('year',year(df['Date']))

  Date          Col1   COl2   year
  2010-01-01     23     28    2010
  2012-09-01     50     70    2012   and so on

现在,我正在努力寻找每年的最大col1和col2。所以我使用groupby:

df_new.groupby('year').max().show()

我得到的结果不是我所期望的。获得的结果

year    max(year)
   2010    2010
   2012    2012   and so on

预期结果

year    max(Col1)    max(Col2)
    2010     80            28
    2012     67             70
koaltpgm

koaltpgm1#

--

+---+-------------------+----+-------+-------+
| id|               date|Year|max_col|min_col|
+---+-------------------+----+-------+-------+
|  5|2019-12-31 23:26:59|2019|      5|      2|
|  2|2019-12-31 23:26:59|2019|      5|      2|
|  1|1969-12-31 23:26:59|1969|      3|      1|
|  2|1969-12-31 23:26:30|1969|      3|      1|
|  3|1969-12-31 23:26:26|1969|      3|      1|
|  4|2020-12-31 23:26:59|2020|      4|      1|
|  1|2020-12-31 23:26:59|2020|      4|      1|
+---+-------------------+----+-------+-------+
ftf50wuq

ftf50wuq2#

你应该执行多个 max , aggCol1 以及 Col2 ```
from pyspark.sql import functions as F
df_new.groupBy(F.year("Date")).agg(F.max("Col1"),F.max("Col2"))
.show()

kq4fsx7k

kq4fsx7k3#

如果您有一个巨大的数据集,最好在下面这样的情况下使用窗口函数,这比groupby执行得更好

from pyspark.sql import functions as F
from pyspark.sql.window import Window as W
df = spark.table("test_poc")
df = df.withColumn("Year", F.year(F.col('date')))
_w = W.partitionBy(F.col('year'))
df = df.withColumn('max_col', F.max('id').over(_w)).withColumn('min_col', F.min('id').over(_w))
df.show()

---------输出

pkwftd7m

pkwftd7m4#

检查以下代码。

from pyspark.sql import functions as F

df.withColumn('year',F.year(df['date'])).groupBy("year").agg(F.max("col1").alias("max_col1"),F.max("col2").alias("max_col2")).show()

相关问题