Математические функции в PySpark
Арифметические операции над колонками DataFrame, базовые функции (abs, round, ceil, floor), экспоненциальные и логарифмические (exp, log, sqrt, pow), тригонометрические (sin, cos, tan).
core
Арифметические операции¶
Арифметические операции выполняются напрямую над колонками DataFrame с помощью операторов Python.
| Операция | Пример синтаксиса | Описание |
|---|---|---|
| Сложение | df.withColumn("sum", df["a"] + df["b"]) |
Складывает значения колонок a и b |
| Вычитание | df.withColumn("diff", df["a"] - df["b"]) |
Вычитает b из a |
| Умножение | df.withColumn("product", df["a"] * df["b"]) |
Перемножает a и b |
| Деление | df.withColumn("quotient", df["a"] / df["b"]) |
Делит a на b |
| Остаток | df.withColumn("remainder", df["a"] % df["b"]) |
Вычисляет остаток от деления a/b |
Математические функции¶
Базовые функции¶
| Функция | Пример синтаксиса | Описание |
|---|---|---|
abs |
df.withColumn("abs_val", abs(col("a"))) |
Модуль значения колонки |
round |
df.withColumn("rounded", round(col("a"), 2)) |
Округление до 2 десятичных знаков |
ceil |
df.withColumn("ceil_val", ceil(col("a"))) |
Округление вверх до целого |
floor |
df.withColumn("floor_val", floor(col("a"))) |
Округление вниз до целого |
Экспоненциальные и логарифмические функции¶
| Функция | Пример синтаксиса | Описание |
|---|---|---|
exp |
df.withColumn("exp_val", exp(col("a"))) |
Экспонента значения колонки |
log |
df.withColumn("log_val", log(col("a"))) |
Натуральный логарифм |
log10 |
df.withColumn("log10_val", log10(col("a"))) |
Логарифм по основанию 10 |
pow |
df.withColumn("power_val", pow(col("a"), 3)) |
Возводит колонку a в степень 3 |
sqrt |
df.withColumn("sqrt_val", sqrt(col("a"))) |
Квадратный корень |
Тригонометрические функции¶
| Функция | Пример синтаксиса | Описание |
|---|---|---|
sin |
df.withColumn("sin_val", sin(col("a"))) |
Синус колонки (в радианах) |
cos |
df.withColumn("cos_val", cos(col("a"))) |
Косинус колонки (в радианах) |
tan |
df.withColumn("tan_val", tan(col("a"))) |
Тангенс колонки (в радианах) |
Примеры¶
Пример 1: Арифметические операции¶
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
spark = SparkSession.builder.master("local").appName("Arithmetic Example").getOrCreate()
# Тестовые данные
data = [(1, 10, 3), (2, 20, 5), (3, 15, 4)]
df = spark.createDataFrame(data, ["id", "value1", "value2"])
# Арифметические операции
df = df.withColumn("sum", col("value1") + col("value2")) \
.withColumn("difference", col("value1") - col("value2")) \
.withColumn("product", col("value1") * col("value2")) \
.withColumn("quotient", col("value1") / col("value2")) \
.withColumn("remainder", col("value1") % col("value2"))
df.show()
Вывод:
+---+------+-------+---+----------+-------+---------+---------+
| id|value1|value2 |sum|difference|product|quotient |remainder|
+---+------+-------+---+----------+-------+---------+---------+
| 1| 10| 3| 13| 7| 30| 3.3| 1|
| 2| 20| 5| 25| 15| 100| 4.0| 0|
| 3| 15| 4| 19| 11| 60| 3.8| 3|
+---+------+-------+---+----------+-------+---------+---------+
Пример 2: Математические функции¶
from pyspark.sql.functions import abs, round, ceil, sqrt
# Применение математических функций
df = df.withColumn("absolute_value1", abs(col("value1"))) \
.withColumn("rounded_value2", round(col("value2"), 1)) \
.withColumn("ceil_value1", ceil(col("value1"))) \
.withColumn("sqrt_value2", sqrt(col("value2")))
df.show()
Вывод:
+---+------+-------+----------------+---------------+----------+---------+
| id|value1|value2 |absolute_value1|rounded_value2 |ceil_value1|sqrt_value2|
+---+------+-------+----------------+---------------+----------+---------+
| 1| 10| 3| 10| 3| 10| 1.73|
| 2| 20| 5| 20| 5| 20| 2.23|
| 3| 15| 4| 15| 4| 15| 2.00|
+---+------+-------+----------------+---------------+----------+---------+
Пример 3: Комбинирование арифметики и математических функций¶
from pyspark.sql.functions import pow, log10
# Комбинирование функций
df = df.withColumn("power_value1", pow(col("value1"), 2)) \
.withColumn("log10_value2", log10(col("value2")))
df.show()
Вывод:
+---+------+-------+------------+--------------+
| id|value1|value2 |power_value1|log10_value2 |
+---+------+-------+------------+--------------+
| 1| 10| 3| 100| 0.48|
| 2| 20| 5| 400| 0.70|
| 3| 15| 4| 225| 0.60|
+---+------+-------+------------+--------------+
Итог¶
Сочетание арифметических операторов и математических функций PySpark позволяет эффективно выполнять широкий спектр вычислений над колонками DataFrame.