hiveql удалить дубликаты, включая записи, которые имели дубликат - PullRequest
0 голосов
/ 29 октября 2018

У меня есть оператор выбора, который я храню в кадре данных ....

val df = spark.sqlContext.sql("select prty_tax_govt_issu_id from CST_EQUIFAX.eqfx_prty_emp_incm_info where emp_mtch_cd = 'Y' and emp_mtch_actv_rcrd_in = 'Y' and emp_sts_in = 'A'");

Затем я хочу взять этот фрейм данных и ТОЛЬКО выбрать уникальные записи. Поэтому определите все дубликаты в поле prty_tax_govt_issu_id и, если есть дубликаты, удалите не только дубликаты, но и всю запись с этим prty_tax_govt_issu_id

Таким образом, исходный фрейм данных может выглядеть как ...

+---------------------+
|prty_tax_govt_issu_id|
+---------------------+
|            000000005|
|            000000012|
|            000000012|
|            000000028|
|            000000038|
+---------------------+

Новый фрейм данных должен выглядеть как ....

|prty_tax_govt_issu_id|
+---------------------+
|            000000005|
|            000000028|
|            000000038|
+---------------------+

Не уверен, что мне нужно будет сделать это после того, как я сохраню данные в кадре или я смогу просто получить этот результат в своем операторе select. Спасибо:)

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Подсчитайте количество строк в идентификаторе и выберите те, у которых число = 1.

val df = spark.sql("select prty_tax_govt_issu_id from CST_EQUIFAX.eqfx_prty_emp_incm_info where emp_mtch_cd = 'Y' and emp_mtch_actv_rcrd_in = 'Y' and emp_sts_in = 'A'")
// Get counts per id
val counts = df.groupBy("prty_tax_govt_issu_id").count()
// Filter for id's having only one row
counts.filter($"count" == 1).select($"prty_tax_govt_issu_id").show()

В SQL вы можете сделать

val df = spark.sql("""
                    select prty_tax_govt_issu_id 
                    from CST_EQUIFAX.eqfx_prty_emp_incm_info
                    where emp_mtch_cd = 'Y' and emp_mtch_actv_rcrd_in = 'Y' and emp_sts_in = 'A' 
                    group by prty_tax_govt_issu_id 
                    having count(*)=1
                   """)   
df.show() 
0 голосов
/ 29 октября 2018

предложение group by сделало бы это

select prty_tax_govt_issu_id 
from CST_EQUIFAX.eqfx_prty_emp_incm_info 
where emp_mtch_cd = 'Y' 
and emp_mtch_actv_rcrd_in = 'Y' 
and emp_sts_in = 'A'
GROUP BY prty_tax_govt_issu_id
...