Spark基于其他数据框中的列在数据框中重复数据删除列

时间:2016-06-06 17:51:00

标签: apache-spark dataframe apache-spark-sql

我正在尝试根据另一个数据帧列中的值对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 个答案:

答案 0 :(得分:6)

执行此操作的方法是执行left_outer join,然后过滤联接的右侧空白的位置。类似的东西:

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)