PySpark эквивалент простого соединения SQL - PullRequest
0 голосов
/ 31 января 2019

Это, вероятно, далеко не простой вопрос.

Но я не слишком далеко захожу сам по себе.

Я пытаюсь использовать PySpark в Databricks для SQL-эквивалента поиска:

select 
    a.*
    , b.MASTER_ID as PLAYER_ID 
from vGame a
join PLAYER_XREF b 
on a.PLAYER_NAME = b.PLAYER

Обратите внимание, что два атрибута с обеих сторон on НЕ называются одинаковыми.

Можете ли вы показать мне версию pyspark одинаковую?Мне кажется, что многочисленные тангенциальные посты здесь слишком сложны по сравнению с этим.

Я нашел это, и это действительно близко, но возвращенный фрейм данных - это все столбцы ta & tb.

inner_join = ta.join(tb, ta.name == tb.name)

Ответы [ 2 ]

0 голосов
/ 31 января 2019
Логика

:

1.) Сначала мы переименовываем player_name в ta dataframe в player, чтобы мы могли присоединиться к

2.) После того, как columnNames совпадают, мы можем использовать соединение в квадратных скобках[]

3.) Также мы динамически выбираем столбцы из фрейма данных ta

код:

ta = ta.withColumn("player_name","player")
inner_join = ta.join(tb,["player"]).select(col(x) for x in ta.columns])
0 голосов
/ 31 января 2019

Я могу перечислить все ta столбцы по отдельности и псевдоним один tb столбец с:

from pyspark.sql.functions import *

inner_join = ta.join(tb, ta.PLAYER_NAME == tb.PLAYER).select('<taCol1>', '<taCol2>', ... col('MASTER_ID').alias('PLAYER_ID'))

display(inner_join)
...