Sql 识别数据帧中的重复记录
我有一个数据框,如下所示,用于识别任何人的全名:Sql 识别数据帧中的重复记录,sql,dataframe,apache-spark,Sql,Dataframe,Apache Spark,我有一个数据框,如下所示,用于识别任何人的全名: ------------------- | f_name | l_name | ------------------- | abc | xyz | | xyz | abc | | pqr | lmn | ------------------- 这里的第二行与第一行基本相同 考虑这样一种情况,即数据中出现了一个条目,其中姓氏错误地放在了名下(f_name),而姓氏错误地放在了姓氏下(l_name) 如何在spa
-------------------
| f_name | l_name |
-------------------
| abc | xyz |
| xyz | abc |
| pqr | lmn |
-------------------
这里的第二行与第一行基本相同
考虑这样一种情况,即数据中出现了一个条目,其中姓氏错误地放在了名下(f_name),而姓氏错误地放在了姓氏下(l_name)
如何在spark dataframe中识别和删除/解决此类重复/错误记录
预期结果:
-------------------
| f_name | l_name |
-------------------
| abc | xyz |
| pqr | lmn |
-------------------
解决方案可以是使用
udf
或SQL
或两者。Thnx 使用dropDuplicates
功能,该功能可用于数据集
,并使用正确的键:
val df = Seq(
("abc", "xyz"),
("xyz", "abc"),
("pqr", "lmn")
).toDF("f_name", "l_name")
df.withColumn("key", array_sort(array('f_name, 'l_name))).dropDuplicates("key")
+------+------+----------+
|f_name|l_name| key|
+------+------+----------+
| pqr| lmn|[lmn, pqr]|
| abc| xyz|[abc, xyz]|
+------+------+----------+
使用
dropDuplicates
功能,该功能可用于Dataset
,并使用正确的键:
val df = Seq(
("abc", "xyz"),
("xyz", "abc"),
("pqr", "lmn")
).toDF("f_name", "l_name")
df.withColumn("key", array_sort(array('f_name, 'l_name))).dropDuplicates("key")
+------+------+----------+
|f_name|l_name| key|
+------+------+----------+
| pqr| lmn|[lmn, pqr]|
| abc| xyz|[abc, xyz]|
+------+------+----------+
@Kombajin回答得很好!。您还可以帮助将“键”列数组转换为最终df中的列吗?表示为列(全名)值(abc_xyz)。我尝试转换为rdd,然后拆分每一行(0),但是我得到了WrappedArray(abc_xyz)@Harshv:查看查找
数组\u连接
函数。请尝试:。withColumn(“全名”,array\u join('key,”)
@Kombajin回答得很好。您还可以帮助将该“key”列数组转换为最终df中的一列吗?例如作为列(全名)值(abc\u xyz)。我尝试转换为rdd,然后拆分每行(0),但我得到了WrappedArray(abc\u xyz)@Harshv:查看查找数组连接的功能。请尝试:。使用列(“全名”,数组连接('key')
。