如何使用 Spark Dataframe 实现“over (partition by value)”

Posted

技术标签:

【中文标题】如何使用 Spark Dataframe 实现“over (partition by value)”【英文标题】:How to implement "over (partition by value)" using Spark Dataframe 【发布时间】:2017-11-30 23:23:08 【问题描述】:

我打算修改一列Spark Dataframe来实现下面Hive QL的类似目的:

SELECT Id, MIN(Id) over (PARTITION BY Age) Rep FROM Employees

我的问题是如何在 UDF 中实现“over (partition by ..)”?

我的电话是这样的:

def _udfuntion =  ... 
val ownfunc = udf(_udfunction)
df.withColumn("Rep", ownfunc($"Id", $"Age"))

【问题讨论】:

【参考方案1】:

您需要使用用户定义的聚合函数 (UDAF) 而不是 UDF。

有一些很好的例子,例如https://docs.databricks.com/spark/latest/spark-sql/udaf-scala.html 和 https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-sql-UserDefinedAggregateFunction.html

【讨论】:

以上是关于如何使用 Spark Dataframe 实现“over (partition by value)”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache Spark 中为具有不同结构的两个 DataFrame 实现 NOT IN

如何在 Spark 中使用 Python 查找 DataFrame 中的分区数以及如何在 Spark 中使用 Python 在 DataFrame 中创建分区

Spark 'join' DataFrame 与 List 并返回 String

使用 java Spark DataFrame 通过 jdbc 访问 Oracle

如何使用 python 在 Spark 中转置 DataFrame 而不进行聚合

spark DataFrame的创建几种方式和存储