Математические функции в 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.