Overview

PySpark 3.3, released on June 17, 2022, introduces Arrow-optimized UDFs for better data transfer performance.

Main Features

Arrow-optimized UDFs

Arrow UDFs use Apache Arrow for data transfer between the JVM and Python, offering up to 100x better performance.

python
from pyspark.sql import SparkSession
from pyspark.sql.functions import pandas_udf
import pandas as pd

spark = SparkSession.builder.getOrCreate()

@pandas_udf('double')
def normalize(s: pd.Series) -> pd.Series:
    return (s - s.mean()) / s.std()

df = spark.range(1000).selectExpr('id as value')
df.select(normalize('value')).show(5)

Spark SQL improvements

Spark SQL benefits from new query optimizations and better support for complex types like arrays and structs.

python
from pyspark.sql import SparkSession
from pyspark.sql import functions as F

spark = SparkSession.builder.getOrCreate()

df = spark.createDataFrame([
    ('Alice', [90, 85, 92]),
    ('Bob', [78, 88, 95]),
], ['name', 'scores'])

# Array operations
df.select(
    'name',
    F.aggregate('scores', F.lit(0), lambda acc, x: acc + x).alias('total'),
).show()

Sources