Как это сделать в Pyspark?
То, что вы ищете, это join
A.join(other=B, on=(A['lkey'] == B['rkey']), how='outer')\
.select(A['lkey'], A['value'].alias('value_x'), B['rkey'], B['value'].alias('value_y'))\
.show(truncate=False)
, который должен дать вам
+----+-------+----+-------+
|lkey|value_x|rkey|value_y|
+----+-------+----+-------+
|bar |2 |bar |6 |
|bar |2 |bar |8 |
|null|null |qux |7 |
|foo |1 |foo |5 |
|foo |4 |foo |5 |
|baz |3 |null|null |
+----+-------+----+-------+
Чтобы сделать шаг вперед, как я могу объединить lkey и rkey в один столбец, дополнив пропущенное значение с обеих сторон?
Вы можете rename
столбцы и использовать join
как
from pyspark.sql.functions import col
A.select(col('lkey').alias('key'), col('value').alias('value_x'))\
.join(other=B.select(col('rkey').alias('key'), col('value').alias('value_y')), on=['key'], how='outer')\
.show(truncate=False)
, который должен дать вам
+---+-------+-------+
|key|value_x|value_y|
+---+-------+-------+
|bar|2 |6 |
|bar|2 |8 |
|qux|null |7 |
|foo|1 |5 |
|foo|4 |5 |
|baz|3 |null |
+---+-------+-------+
Надеюсь, ответ полезен