#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')]