窗口函数分区通过列表

时间:2018-10-06 08:26:16

标签: scala apache-spark pyspark

我有一个数据框表DS 在scala中,我可以使用以下命令删除主键上的重复项-

import org.apache.spark.sql.expressions.Window.partitionBy
import org.apache.spark.sql.functions.row_number

val window = partitionBy(primaryKeySeq.map(k => tableDS(k)): _*).orderBy(tableDS(mergeCol).desc)
tableDS.withColumn("rn", row_number.over(window)).where($"rn" === 1).drop("rn")

我需要用python写类似的东西。 primaryKeySeq是python中的列表。我尝试过这样的第一个陈述-

from pyspark.sql.window import Window
import pyspark.sql.functions as func

window = Window.partitionBy(primaryKeySeq).orderBy(tableDS[bdtVersionColumnName].desc())
tableDS1=tableDS.withColumn("rn",rank().over(window))

这不能给我正确的结果。

1 个答案:

答案 0 :(得分:0)

解决了- 这是最终的转换。

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

window = Window.partitionBy(primaryKeySeq).orderBy(tableDS[bdtVersionColumnName].desc())
tableDS1=tableDS.withColumn("rn", row_number.over(window)).where(tableDS["rn"] == 1).drop("rn")