PySpark Dataframe — сравнение нескольких столбцов с одинаковым именем (с добавлением порядкового номера)

1
6

Я пытаюсь решить проблему, но ничего не получается. Нужна помощь сообщества.

Я могу объединить n-ное количество фреймов данных (все объединенные фреймы данных имеют одинаковую схему). Во время объединения я переименовал столбцы, чтобы добавить суффикс серийного номера. Данные выглядят так -

+-------------------------------------+-----------+-----------+...+-----------+-----------+...+-----------+-----------+......+-----------+-----------+ |primary_key |Test_Col1_0|Test_Col2_0|...|Test_Col1_1|Test_Col2_1|...|Test_Col1_2|Test_Col2_2|......|Test_Col1_n|Test_Col2_n| +------------------------------------+-----------+-----------+...+-----------+-----------+...+-----------+-----------+......+-----------+-----------+ |{10002711957914718:0000000015945968}|XYZ |ABC |...|PQR |MNO |...|JKL |DEF |......|SRT |TUV | |{10014135598021497:0000000213113137}|XYZ |ABC |...|XYZ |MNO |...|XYZ |DEF |......|XYZ |TUV | : : +------------------------------------+-----------+-----------+...+-----------+-----------+...+-----------+-----------+......+-----------+-----------+

Я хочу сравнить все соответствующие столбцы (Test_Col1_0, Test_Col1_1, Test_Col1_2,...., Test_Col1_n) и сгенерировать нижеприведенный тип нормализованного результата. Запись в этом результате должна генерироваться только в том случае, если какие-либо значения из соответствующих столбцов не совпадают (например, запись для Test_Col1 создается для первого первичного ключа, но не в случае второго первичного ключа в данных примера) -

+-------------------------------------+-------------+------------------------------------------------------+ |primary_key |Diff_Col_Name|Diff_Col_Values ​​| +------------------------------------+-------------+-----------------------------------------------------+ |{10002711957914718:0000000015945968}|Test_Col1 |{Src_1:XYZ}{Src_2:PQR}{Src_3:JKL}......{Src_n:SRT} | |{10002711957914718:0000000015945968}|Test_Col2 |{Источник_1:ABC}{Источник_2:MNO}{Источник_3:DEF}......{Источник_n:TUV} | |{10002711957914718:0000000015945968}| : |{10002711957914718:0000000015945968}|Test_ColX |{Источник_1:...}{Источник_2:...}{Источник_3:...}......{Источник_n:...} |

|{10014135598021497:0000000213113137}|Test_Col2 |{Источник_1:ABC}{Источник_2:MNO}{Источник_3:DEF}......{Источник_n:TUV} | |{10014135598021497:0000000213113137}| : |{10014135598021497:0000000213113137}|Test_ColX |{Src_1:...}{Src_2:...}{Src_3:...}......{Src_n:...} |

Я думал создать столбцы (например, Text_Col1, Text_Col2, ..., Test_ColX) со значением, состоящим из объединенных значений из всех соответствующих столбцов, чтобы затем я мог выполнить дедупликацию в списке и посмотреть, больше ли длина списка 1 (что будет означать, что у нас есть несколько столбцов, которые имеют отличающиеся значения, чем оставшиеся соответствующие столбцы). Но метод withColumns не работает на моих серверах. (Я получаю ошибку - AttributeError: объект 'DataFrame' не имеет атрибута 'withColumns')

Любое решение без использования 'withColumns' будет очень полезным. Пожалуйста, помогите.

Владимир
Вопрос задан3 июля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.