Как присоединиться к таблице со значениями столбцов - PullRequest
0 голосов
/ 13 июля 2020

У меня есть 2 фрейма данных ниже:

Курс:

-------------------------—
Name    | Course
-------------------------—
Tom     | English
Tom     | Mathematics
Lily    | English
Lily    | Chinese

Оценка:

-------------------------—-------—-------—
Name    | English | Chinese | Mathematics
-------------------------—-------—-------—
Tom     | 78      | 0       | 90
Lily    | 85      | 88      | 0

I хотите использовать значение курса в таблице курса, чтобы присоединиться к указанному столбцу в таблице результатов, чтобы получить значение. затем получите результат, как показано ниже, будут отображаться только 2 столбца курса.

Результат:

-------------------------—--
Name    | Course1 | Course2
-------------------------—--
Tom     | 78      | 90
Lily    | 85      | 88

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете добиться этого, отключив фрейм данных, затем соединив оба фрейма данных, а затем развернув результирующий фрейм данных

df1 = spark.createDataFrame([('Tom','English'),
('Tom','Mathematics'),
('Lily','English'),
('Lily','Chinese')],['Name','Course'])

df2 = spark.createDataFrame([('Tom',78,0,90),('Lily',85,88,0)],['Name','English','Chinese','Mathematics'])



df3 = df2.select('Name', expr('''stack(3,'English',English,'Chinese',Chinese,'Mathematics',Mathematics) as (Course, score)'''))

df4 = df3.join(df1, (df1.Name==df3.Name) & (df1.Course==df3.Course), 'inner').select(df1.Name,df1.Course,df3.score).\
groupBy('Name').pivot('Course').agg(min('score'))

df4.show()

+----+-------+-------+-----------+
|Name|Chinese|English|Mathematics|
+----+-------+-------+-----------+
| Tom|   null|     78|         90|
|Lily|     88|     85|       null|
+----+-------+-------+-----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...