Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为具有最大值的行选择所有列_Python_Apache Spark_Pyspark - Fatal编程技术网

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

Python 如何为具有最大值的行选择所有列,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我需要通过按“ID”分组从数据帧中选择所有列。但当我这样做时,我只得到ID和“值”。我需要所有栏目 a=df.groupby(df['id']).agg({"date": "max"} a.show() 这仅选择“id”和“日期”列。还有其他栏目。如何为日期中的最大值选择所有列。在spark中,有两种方法可以将其与以前的数据帧连接起来,如下所示: a=df.groupby(df['id']).agg({"date": "max"} df = df.joi

我需要通过按“ID”分组从数据帧中选择所有列。但当我这样做时,我只得到ID和“值”。我需要所有栏目

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

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

在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(
    "max",
    (F.max(F.col("date")).over(window))
)
a.show() 
或者像这样使用窗口分区:

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(
    "max",
    (F.max(F.col("date")).over(window))
)
a.show() 

我更喜欢第一个方法,因为即使在联接之后,它的成本也更低。

第二个方法的可能重复
TypeError:withColumn()缺少1个必需的位置参数:“col”
感谢您指出它,编辑了解决方案。withColumn接受两个位置参数,第一个是列的名称,另一个是新列的表达式