Функция удаления дубликатов столбцов из большого набора данных - PullRequest
0 голосов
/ 20 декабря 2018

Пытаетесь удалить повторяющиеся имена столбцов в pyspark df после присоединения к таблицам hdfs?

Здравствуйте, я пытаюсь объединить несколько наборов данных с конечным числом столбцов 200+.Из-за требований и большого количества столбцов я не могу выбрать конкретные столбцы при объединении.Есть ли способ удалить дубликаты столбцов после объединения.Я знаю, что есть способ сделать это методом .join для spark df, но базовые таблицы, к которым я присоединяюсь, не являются spark df, и я пытаюсь избежать преобразования их в spark df перед объединением.

Оригинальный pysparkобъединить запрос для создания Spark DF #

cust_base=sqlc.sql('''
Select distinct *
FROM db.tbl1 as t1
LEFT JOIN db.tbl2 as t2 ON (t1.acct_id=t2.acct_id) 
LEFT JOIN db.tbl3 as t3 ON (t1.cust_id=t3.cust_id)
WHERE t1.acct_subfam_mn IN ('PIA','PIM','IAA')
AND t1.active_acct_ct <> 0
AND t1.efectv_dt = '2018-10-31'
AND (t2.last_change_dt<='2018-10-31' AND (t2.to_dt is null OR t2.to_dt > 
'2018-10-31'))
AND (t3.last_change_dt<='2018-10-31' AND (t3.to_dt is null OR t3.to_dt > 
'2018-10-31'))
''').registerTempTable("df1")

ошибка при проверке различного числа cust_id

 a=sqlc.sql('''
 Select 
 count(distinct a.cust_id) as CT_ID
 From df1
 ''')

AnalysisException: "Reference 'cust_id' is ambiguous, could be: cust_id#7L, 
cust_id#171L.; line 3 pos 15"

This is 'cust_id' field present more than once due to join

Я хочу удалить дублирующиеся столбцы из полученного объединенного df.Заранее спасибо

1 Ответ

0 голосов
/ 21 декабря 2018

Я могу помочь написать функцию для поиска дубликатов столбцов в заданном фрейме данных.

Допустим, ниже приведен фрейм данных с дублирующимися столбцами:

+------+----------------+----------+------+----------------+----------+
|emp_id|emp_joining_date|emp_salary|emp_id|emp_joining_date|emp_salary|
+------+----------------+----------+------+----------------+----------+
|     3|      2018-12-06|     92000|     3|      2018-12-06|     92000|
+------+----------------+----------+------+----------------+----------+

def finddups(*args):
    import collections
    dupes = []
    for cols in args:
        [dupes.append(item) for item, count in collections.Counter(cols).items() if count > 1]
        return dupes

   >>> duplicatecols = finddups(df.columns)
>>> print duplicatecols
['emp_id', 'emp_joining_date', 'emp_salary']
...