Вы можете использовать запись .
для выбора элемента из столбца struct
. поэтому, чтобы выбрать id
из df1 , вам нужно будет сделать myStruct.id
, а чтобы выбрать region
, вы должны использовать myStruct.region
.
И , поскольку имена столбцов, которые будут использоваться, не совпадают вы можете использовать ===
для сравнения как
df1.join(df2, df1("myStruct.id") === df2("id") && df1("myStruct.region") === df2("region"), "leftouter")
Вы должны иметь объединенный фрейм данных со следующей схемой
root
|-- myStruct: struct (nullable = true)
| |-- id: string (nullable = true)
| |-- region: long (nullable = false)
|-- first_name: string (nullable = true)
|-- id: string (nullable = true)
|-- region: integer (nullable = true)
|-- second_name: string (nullable = true)
Вы можете удалить ненужные столбцы после объединения или выбрать только необходимые столбцы после объединения
Надеюсь, ответ полезен