Получить столбцы из двух информационных фреймов, где значения отличаются - PullRequest
1 голос
/ 23 марта 2020

У меня есть два почти идентичных фрейма данных Pyspark: одинаковое количество строк и row_id, одна и та же схема, но разные значения в некоторых столбцах для каждой строки.

Я хочу определить, что это за столбцы для каждой строки.

Пример:

Фрейм данных A

id  fname   lname   email
1   Michael Jackson mj@yahoo.com
2   Roger   Moore   rm@rocketmail.com
3   Angela  Merkel  am@dw.de

Фрейм данных B

id  fname   lname   email
1   Michael Jordan  mj@yahoo.com
2   Gordon  Moore   rm@rocketmail.com
3   Angela  Markle  am@dw.com

Ожидаемый результат - список словарей:

[ 
  {"1": ["lname"]}, 
  {"2": ["fname"] }, 
  {"3": ["lname", "email"] }
]

1 Ответ

0 голосов
/ 10 апреля 2020

Вот более обобщенный ответ, использующий преобразование СДР:

column_names = a_df.schema.names

def compare(row):
    diff_columns = []
    for col in column_names:
        if row[1][0][col] != row[1][1][col]:
            diff_columns.append(col)

    return ( row[0],  { row[0]: diff_columns } )

# convert to Pair RDD for joining
a_pair_rdd = a_df.rdd.map(lambda x: (x['id'], x))
b_pair_rdd = b_df.rdd.map(lambda y: (y['id'], y))
joined_rdd = a_pair_rdd.join(b_pair_rdd)

output = joined_rdd.map(compare).map(lambda pair: pair[1]).collect()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...