Обращение к колонкам в PySpark DataFrame
Пять способов обращения к колонкам: строки, dot-нотация, функция col(), скобочная нотация и функция lit() для константных значений.
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-дружелюбным.