基于 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(...)
其中...
替换为基于A
和maxB
的谓词。
【讨论】:
以上是关于基于 Spark DF 中 2 列的组合过滤行的主要内容,如果未能解决你的问题,请参考以下文章
pandas基于组合逻辑筛选dataframe中两个数据列都满足条件的数据行(两个指定数据列的值都大于零的数据行)
是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?