如何为具有最大值的行选择所有列

时间:2018-09-06 14:56:33

标签: python apache-spark pyspark

我需要通过对“ ID”进行分组来从数据框中选择所有列。但是当我这样做时,我只会得到ID和“值”。我需要所有列

a=df.groupby(df['id']).agg({"date": "max"}
a.show()

这仅选择“ id”和“ date”列。还有其他列。如何为日期中的最大值选择所有列。

1 个答案:

答案 0 :(得分:1)

在spark中,有两种方法可以将其与上一个数据帧连接起来,如下所示:

a=df.groupby(df['id']).agg({"date": "max"}
df = df.join(
    a,
    on = "id",
    how = "inner"
)
df.show()

或像这样使用窗口分区:

from pyspark.sql import Window
import pyspark.sql.functions as F
window = Window.partitionBy("id")
a = df.withColumn(
    (F.max(F.col("date")).over(window)).alias("max")
)
a.show() 

我想选择第一个,因为即使加入后成本也较低。