Spark基于其他数据框中的列对数据框中的列进行重复数据删除

Posted

技术标签:

【中文标题】Spark基于其他数据框中的列对数据框中的列进行重复数据删除【英文标题】:Spark Deduplicate column in dataframe based on column in other dataframe 【发布时间】:2016-06-06 17:50:59 【问题描述】:

我正在尝试根据另一个数据框列中的值对 Spark 数据框列中的值进行重复数据删除。 withColumn() 似乎只能在单个数据框中工作,并且子查询要到版本 2 才能完全可用。我想我可以尝试加入这些表,但这似乎有点混乱。大致思路如下:

df.take(1)
[Row(TIMESTAMP='20160531 23:03:33', CLIENT ID=233347, ROI NAME='my_roi', ROI VALUE=1, UNIQUE_ID='173888')]

df_re.take(1)
[Row(UNIQUE_ID='6866144:ST64PSIMT5MB:1')]

基本上只想从df 中获取值并删除在df_re 中找到的任何值,然后返回整个数据框,其中包含那些重复的行已删除。我确信我可以迭代每一个,但我想知道是否有更好的方法。 有什么想法吗?

【问题讨论】:

【参考方案1】:

执行此操作的方法是执行left_outerjoin,然后过滤连接右侧为空的位置。比如:

val df1 = Seq((1,2),(2,123),(3,101)).toDF("uniq_id", "payload")
val df2 = Seq((2,432)).toDF("uniq_id", "other_data")

df1.as("df1").join(
  df2.as("df2"),
  col("df1.uniq_id") === col("df2.uniq_id"),
  "left_outer"
).filter($"df2.uniq_id".isNull)

【讨论】:

以上是关于Spark基于其他数据框中的列对数据框中的列进行重复数据删除的主要内容,如果未能解决你的问题,请参考以下文章

使用 json 模式更新 spark 数据框中的列

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

Scala(Spark)连接数据框中的列[重复]

Spark - 如何使用列对数据框中的字符串进行切片[重复]

基于多索引列数据框中的列范围进行切片

spark中的isNullOrEmpty函数检查数据框中的列是不是为空或空字符串