基于 Spark DF 中 2 列的组合过滤行

Posted

技术标签:

【中文标题】基于 Spark DF 中 2 列的组合过滤行【英文标题】:filter rows based on combination of 2 columns in Spark DF 【发布时间】:2018-06-15 23:23:42 【问题描述】:

输入 DF:

  A         B        
  1         1         
  2         1
  2         2
  3         3
  3         1
  3         2 
  3         3
  3         4

我正在尝试根据组合过滤行

(A, Max(B))

输出 Df:

   A        B
   1        1
   2        3
   3        4

我可以做到这一点

 df.groupBy() 

但是 DF 中还有其他列我想被选中但不想被包含在 GroupBy 中 因此,过滤行的条件应该只适用于这些列,而不是 DF 中的其他列。请给个建议>

【问题讨论】:

【参考方案1】:

正如How to get other columns when using Spark DataFrame groupby? 中所建议的,您可以使用窗口函数

import org.apache.spark.sql.expressions._
import org.apache.spark.sql.functions._

df.withColumn("maxB", max(col("B")).over(Window.partitionBy("A"))).where(...)

其中... 替换为基于AmaxB 的谓词。

【讨论】:

以上是关于基于 Spark DF 中 2 列的组合过滤行的主要内容,如果未能解决你的问题,请参考以下文章

pandas基于组合逻辑筛选dataframe中两个数据列都满足条件的数据行(两个指定数据列的值都大于零的数据行)

是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?

将多个数据框组合成多索引列的数据框

基于不同类型spark 1.6列的Spark join dataframe

如何从 R 数据框中过滤列的唯一组合

基于 2 列的组合添加百分比列(Postgresql)