#pyspark
#pyspark
Вопрос:
У меня есть два фрейма данных pyspark A и B. Я хочу внутреннее объединение двух фреймов данных pyspark и выбор всех столбцов из первого фрейма данных и нескольких столбцов из второго фрейма данных.
A_df
id column1 column2 column3 column4
1 A1 A2 A3 A4
2 A1 A2 A3 A4
3 A1 A2 A3 A4
4 A1 A2 A3 A4
B_df
id column1 column2 column3 column4 column5 column6
1 B1 B2 B3 B4 B5 B6
2 B1 B2 B3 B4 B5 B6
3 B1 B2 B3 B4 B5 B6
4 B1 B2 B3 B4 B5 B6
joined_df
id column1 column2 column3 column4 column5 column6
1 A1 A2 A3 A4 B5 B6
2 A1 A2 A3 A4 B5 B6
3 A1 A2 A3 A4 B5 B6
4 A1 A2 A3 A4 B5 B6
Я пытаюсь использовать приведенный ниже код —
joined_df = (A_df.alias('A_df').join(B_df.alias('B_df'),
on = A_df['id'] == B_df['id'],
how = 'inner')
.select('A_df.*',B_df.column5,B_df.column6))
Но это дает странный результат, когда значения в столбцах меняются местами. Как я могу этого добиться? Заранее спасибо
Комментарии:
1.
.select('A_df.*', 'B_df.column5', 'B_df.column6'))
2. Возникает та же проблема. Значения перемешиваются между столбцами
3. если имена столбцов в обеих таблицах совпадают, то это становится неоднозначным. Переименуйте столбец в одной из таблиц и сделайте это. Это сработает.
Ответ №1:
В чем проблема? Все работает, как ожидалось.
df1 = spark.read.option("header","true").option("inferSchema","true").csv("test1.csv")
df2 = spark.read.option("header","true").option("inferSchema","true").csv("test2.csv")
df1.alias('a').join(df2.alias('b'), ['id'], 'inner')
.select('a.*', 'b.column5', 'b.column6').show()
--- ------- ------- ------- ------- ------- -------
| id|column1|column2|column3|column4|column5|column6|
--- ------- ------- ------- ------- ------- -------
| 1| A1| A2| A3| A4| B5| B6|
| 2| A1| A2| A3| A4| B5| B6|
| 3| A1| A2| A3| A4| B5| B6|
| 4| A1| A2| A3| A4| B5| B6|
--- ------- ------- ------- ------- ------- -------