Pyspark: как объединить кадры данных, такие как Pandas? - PullRequest
0 голосов
/ 29 июня 2018

Например, как в https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

>>> A              >>> B
    lkey value         rkey value
0   foo  1         0   foo  5
1   bar  2         1   bar  6
2   baz  3         2   qux  7
3   foo  4         3   bar  8

>>> A.merge(B, left_on='lkey', right_on='rkey', how='outer')
   lkey  value_x  rkey  value_y
0  foo   1        foo   5
1  foo   4        foo   5
2  bar   2        bar   6
3  bar   2        bar   8
4  baz   3        NaN   NaN
5  NaN   NaN      qux   7

Я хочу знать

  1. Как это сделать в Pyspark?
  2. Чтобы сделать шаг вперед, как я могу объединить lkey и rkey в один столбец, дополнив пропущенное значение с обеих сторон?

1 Ответ

0 голосов
/ 29 июня 2018

Как это сделать в 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   |
+---+-------+-------+

Надеюсь, ответ полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...