Pyspark Блоки данных — Необходимо соединить два кадра данных

#python #dataframe #pyspark #merge #databricks

Вопрос:

Мне нужно соединить два кадра данных следующим образом:

Фрейм данных 1:

Дата Имя
2021-01-10 Дэвид

Фрейм данных 2:

колонка1 колонка2 колонка3
1 ХХХ Привет
2 дд Тест
3 эээ Блок
4 дд Поддержка

Фрейм данных 3 = Фрейм данных 1 Фрейм данных 2

Дата Имя колонка1 колонка2 колонка3
2021-01-10 Дэвид 1 ХХХ Привет
2021-01-10 Дэвид 2 дд Тест
2021-01-10 Дэвид 3 эээ Блок
2021-01-10 Дэвид 4 дд Поддержка

Я попытался выполнить несколько слияний (слева и снаружи) , а также объединение, но безуспешно. Не могли бы вы помочь мне реализовать это решение?

Комментарии:

1. Поможет ли перекрестное соединение?

2. @вернер У меня нет этой библиотеки: . ModuleNotFoundError: Нет модуля с именем «pyspark.sql.DataFrame», который я использую в базах данных

3. Нет необходимости импортировать DataFrame модуль, это команда, о которой упоминал @werner: df3 = df1.crossJoin(df2)

Ответ №1:

На базах данных:

 d1 = spark.createDataFrame(dataframe1)
d2 = spark.createDataFrame(dataframe2)

d1.createOrReplaceTempView("vw_d1")
d2.createOrReplaceTempView("vw_d2")


d3 = spark.sql('''select * from vw_d1 CROSS JOIN vw_d2''')
 

Ответ №2:

Это должно быть перекрестное соединение: pyspark.sql.DataFrame.Перекрестное соединение

 Dataframe3 = Dataframe1.crossJoin(Dataframe2)
 

Результат:

 Dataframe3.collect()
[Row(date=datetime.date(2021, 1, 10), name='David', column1=1, column2='xxx', column3='Hello'),
 Row(date=datetime.date(2021, 1, 10), name='David', column1=2, column2='dd', column3='Test'),
 Row(date=datetime.date(2021, 1, 10), name='David', column1=3, column2='eee', column3='Block'),
 Row(date=datetime.date(2021, 1, 10), name='David', column1=4, column2='dd', column3='Support')]