Конкатенация колонок в DataFrame через Spark SQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для слияния колонок в DataFrame Apache Spark используйте функцию concat из пакета pyspark.sql.functions. Вот пример использования этой функции:

Python
Скопировать код
from pyspark.sql.functions import concat, col

# Предположим, что в DataFrame 'df' существуют колонки 'FirstName' и 'LastName'
df.select(concat(col("FirstName"), col("LastName")).alias("FullName")).show()

В результате будет создана новая колонка "FullName", в которой значения "FirstName" и "LastName" объединены. Одним словом, мы создали "звездный дуэт" в нашем DataFrame!

Кинга Идем в IT: пошаговый план для смены профессии

Учет разделителей

Если вы хотите добавить пробел между значениями, пользуйтесь функцией concat_ws. Здесь ws означает "with separator" (с разделителем):

Python
Скопировать код
from pyspark.sql.functions import concat_ws, col

# Слияние с использованием пробела в качестве разделителя
df.select(concat_ws(" ", col("FirstName"), col("LastName")).alias("FullName")).show()

Символ пробела хорошо соединяет колонки, и это знает каждый, кто имел дело с ASCII-кодом 32!

Работа с NULL: не позволяйте отсутствующим значениям испортить ваш процесс

Данные не всегда бывают полными и могут содержать null. Естественно, вы не хотите игнорировать этот факт, не так ли? Чтобы правильно объединить колонки, используйте функцию coalesce или оцените условия с помощью when и otherwise:

Python
Скопировать код
from pyspark.sql.functions import coalesce, lit

df.withColumn("FullName", concat(coalesce(col("FirstName"), lit("")), coalesce(col("LastName"), lit(""))))

Null-значения преобразуются в пустые строки. Вот так решается проблема отсутствующих данных!

Определение пользовательской функции: когда вам не хватает встроенных функций

Если стандартных функций оказывается недостаточно, можно создать пользовательскую функцию (User Defined Function, UDF):

Python
Скопировать код
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

def custom_concat(a, b):
    # Здесь вы можете определить свою логику
    return a.strip() + " " + b.strip()

concat_udf = udf(custom_concat, StringType())

df.withColumn("FullName", concat_udf(col("FirstName"), col("LastName")))

Поздравляю! Вы взяли инициативу в свои руки (или, лучше сказать, в свою функцию)!

Визуализация

Представьте колонки вашего DataFrame как бусы, нанизанные на нитку:

Markdown
Скопировать код
Колонка A (FirstName): [John, Jane, Mike]
Колонка B (LastName): [Doe, Roe, Pike]

После слияния получится:

Markdown
Скопировать код
Результат (FullName): [JohnDoe, JaneRoe, MikePike]

Или, если выразиться кодом:

SQL
Скопировать код
df.withColumn("FullName", concat(col("FirstName"), col("LastName")))

Результат: ⚡ Нам удалось успешно объединить 'FirstName' и 'LastName' в одну колонку 'FullName'!

Погружение в объединение в Spark

Использование selectExpr для упрощения кода

Этот подход позволяет использовать SQL-выражения для оптимизации вашего кода:

Python
Скопировать код
df.selectExpr("concat(FirstName, LastName) as FullName").show()

Таким образом, вы сокращаете количество кода, и ваш ответ на Stack Overflow становится лаконичнее!

Прямые SQL-запросы: новые приемы в старом SQL

Кто сказал, что в SQL нет места новшествам?

Python
Скопировать код
df.createOrReplaceTempView("people")
spark.sql("SELECT CONCAT(FirstName, LastName) AS FullName FROM people").show()

Вы можете писать SQL запросы прямо на Python, и, возможно, мы только что изобрели PySQL!

Интерполяция строк с помощью ||

Хитрость для объединения строковых столбцов:

Python
Скопировать код
df.selectExpr("FirstName || LastName as FullName").show()

Кто бы мог подумать, что пара вертикальных линий (||) могут служить склейкой в SQL!

Полезные материалы

  1. Spark SQL, Built-in Functions – официальная документация по функциям DataFrame в Apache Spark.
  2. python – How to change dataframe column names in PySpark? – Stack Overflow – здесь можно найти множество полезных советов о трансформациях DataFrame, в том числе и о манипуляциях со столбцами в PySpark.
  3. Medium – подробный обзор работы с функциями столбцов в Apache Spark.
  4. Advanced Apache Spark Training – Sameer Farooqui (Databricks) – бесплатное видео, полный курс по освоению Apache Spark продолжительностью восемь часов.
  5. [[SPARK-26021]](https://issues.apache.org/jira/browse/SPARK-26021) – задача в JIRA, актуальная для поведения функций в Apache Spark, отражает текущие тенденции развития в сфере открытого исходного кода.