У меня есть два искровых фрейма данных:
Фрейм данных A:
|col_1 | col_2 | ... | col_n |
|val_1 | val_2 | ... | val_n |
и фрейм данных B:
|col_1 | col_2 | ... | col_m |
|val_1 | val_2 | ... | val_m |
Фрейм данных B может содержать повторяющиеся, обновленные и новые строкииз фрейма данных A. Я хочу написать в spark операцию, в которой я могу создать новый фрейм данных, содержащий строки из фрейма данных A и обновленные и новые строки из фрейма данных B.
Я начал с создания хеш-столбца, содержащего толькостолбцы, которые не могут быть обновлены.Это уникальный идентификатор.Допустим, col1
и col2
могут изменить значение (может быть обновлено), но col3,..,coln
уникальны.Я создал хеш-функцию как hash(col3,..,coln)
:
A=A.withColumn("hash", hash(*[col(colname) for colname in unique_cols_A]))
B=B.withColumn("hash", hash(*[col(colname) for colname in unique_cols_B]))
Теперь я хочу написать некоторый искровой код, который в основном выбирает строки из B, которые имеют хэш не в A (поэтому новые строки иобновленные строки) и объедините их в новый фрейм данных вместе со строками из A. Как этого добиться в pyspark?
Редактировать: Фрейм данных B может иметь дополнительные столбцы из фрейма данных A, поэтому объединениеневозможно.
Пример примера
Кадр данных A:
+-----+-----+
|col_1|col_2|
+-----+-----+
| a| www|
| b| eee|
| c| rrr|
+-----+-----+
Кадр данных B:
+-----+-----+-----+
|col_1|col_2|col_3|
+-----+-----+-----+
| a| wew| 1|
| d| yyy| 2|
| c| rer| 3|
+-----+-----+-----+
Результат: Кадр данных C:
+-----+-----+-----+
|col_1|col_2|col_3|
+-----+-----+-----+
| a| wew| 1|
| b| eee| null|
| c| rer| 3|
| d| yyy| 2|
+-----+-----+-----+