窗口函数 partitionBy 在列表上

Posted

技术标签:

【中文标题】窗口函数 partitionBy 在列表上【英文标题】:Window Functions partitionBy over a list 【发布时间】:2018-10-06 08:26:16 【问题描述】:

我有一个数据框 tableDS 在 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】:

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

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")

【讨论】:

以上是关于窗口函数 partitionBy 在列表上的主要内容,如果未能解决你的问题,请参考以下文章

hive关于窗口函数的使用

Oracle ---- 窗口函数

窗口函数

Hive碎碎念(2):分析函数和窗口函数

使用窗口函数时,hive 是不是支持 PARTITION BY 语句中的复杂类型?

常用窗口函数