【发布时间】:2020-07-05 03:49:40
【问题描述】:
我正在尝试从表中读取重复项。基于 Col1 和 Col2 的值有一些部分重复,而基于 Col1、Col2 和 Col3 的值有一些完全重复,如下表所示。
Col1 Col2 Col3
1 John 100
1 John 200
2 Tom 150
3 Bob 100
3 Bob 100
4 Sam 500
我想在两个单独的输出中捕获部分重复和完全重复,并忽略不重复的行,例如 2 和 4,例如
部分重复
Col1 Col2 Col3
1 John 100
1 John 200
完全复制
Col1 Col2 Col3
3 Bob 100
3 Bob 100
用 SQL 实现这一目标的最佳方法是什么?
我尝试将自连接与 spark-sql 一起使用,但出现错误:-
val source_df = sql("select col1, col2, col3 from sample_table")
source_df.as("df1").join(inter_df.as("df2"), $"df1.Col3" === $"df2.Col3" and $"df1.Col2" === $"df2.Col2" and $"df1.Col1" === $"df2.Col1").select($"df1.Col1",$"df1.Col2",$"df1.Col3",$"df2.Col3").show()
错误
org.apache.spark.sql.catalyst.errors.package$TreeNodeException:执行,树: Exchange hashpartitioning(Col3#1957, 200)
【问题讨论】:
-
SELECT Col1, Col2, first(Col3) as Col3 from sample_table group BY Col1, Col2 -
请提供部分和完全重复的定义。
-
我删除了不准确的数据库标签。请仅使用您真正使用的数据库进行标记。
标签: sql apache-spark-sql