Обращение к колонкам в PySpark DataFrame

Пять способов обращения к колонкам: строки, dot-нотация, функция col(), скобочная нотация и функция lit() для константных значений.

core

1. Имена колонок в виде строк

Использование имён колонок в виде строк — наиболее прямолинейный подход, особенно для выборок и фильтрации.

# Выбор колонок по имени
df.select("name", "age")

# Фильтрация по условию колонки
df.filter("age > 30")

Когда использовать: этот метод подходит для простых выборок и условий. Идеален, если вы знакомы с SQL-синтаксисом.


2. Dot-нотация (df.colName)

Можно обращаться к колонкам как к атрибутам DataFrame напрямую — синтаксис становится чище и позволяет выполнять сложные операции.

# Выбор колонок через dot-нотацию
df.select(df.name, df.age)

# Фильтрация строк по условию колонки
df.filter(df.age > 30)

Примечание: избегайте этого синтаксиса для имён колонок, содержащих пробелы или специальные символы.

Когда использовать: удобна для обращения к колонкам и их трансформаций, делает код более читаемым.


3. Функция col()

Функция col() из pyspark.sql.functions универсальна и идеально подходит при передаче имён колонок через переменные или при цепочке нескольких операций с колонками.

from pyspark.sql.functions import col

# Выбор колонок через col()
df.select(col("name"), col("age"))

# Фильтрация строк через col() с гибкостью
age_column = "age"
df.filter(col(age_column) > 30)

Когда использовать: используйте col() при динамическом обращении к колонкам или передаче имён через переменные.


4. Скобочная нотация (df["colName"])

Скобочная нотация позволяет обращаться к колонкам в стиле словаря. Гибкая и часто используется для трансформаций и цепочек.

# Выбор колонок
df.select(df["name"], df["age"])

# Фильтрация с выражениями
df.filter(df["age"] > 30)

# Применение трансформаций
df.select((df["age"] + 10).alias("age_plus_10"))

Когда использовать: используйте скобочную нотацию при работе с колонками, содержащими пробелы или специальные символы.


5. Функция lit() для константных значений

Функция lit() в PySpark позволяет создавать колонки с константными значениями, которые можно комбинировать с другими колонками.

from pyspark.sql.functions import lit

# Добавление колонки с константным значением
df.select(df.name, lit(25).alias("constant_age"))

# Фильтрация на основе константы
df.filter(df.age > lit(30))

Когда использовать: lit() идеально подходит для добавления константных значений в DataFrame или использования констант в выражениях.


Итог

Каждый способ обращения к колонкам в PySpark имеет свои преимущества:

Способ Лучше всего подходит для
Строки SQL-стиль фильтрации и простые выборки
Dot-нотация (df.colName) Наглядные простые выборки и фильтрация
Функция col() Динамические ссылки на колонки
Скобочная нотация (df["colName"]) Сложные выражения и специальные символы
lit() Работа с константами совместно с данными колонок

Правильный выбор нотации делает код PySpark более читаемым, гибким и SQL-дружелюбным.