Файлы PySpark и ORC: идеальное сочетание для обработки больших данных

вступление

ORC (Optimized Row Columnar) — это формат файла, используемый для хранения крупномасштабных наборов данных в виде столбцов. Файлы ORC оптимизированы для аналитических запросов, предлагая значительное повышение производительности по сравнению с форматами хранения на основе строк, такими как CSV или JSON.

В PySpark файлы ORC поддерживаются «из коробки», что позволяет пользователям легко читать и записывать данные в этом формате. PySpark предоставляет API для работы с файлами ORC, включая возможность считывать файлы ORC в DataFrame с помощью метода spark.read.orc() и записывать DataFrames в файлы ORC с помощью метода DataFrame.write.orc().

Файлы ORC можно сжимать, что делает их идеальным выбором для хранения больших объемов данных. Их можно использовать для различных вариантов использования, включая хранилище данных, процессы ETL (извлечение, преобразование, загрузка) и приложения для машинного обучения.

Примеры

Чтение ORC-файлов

Чтобы прочитать файл ORC в PySpark DataFrame, вы можете использовать метод spark.read.orc(). Вот пример:

from pyspark.sql import SparkSession

# create a SparkSession
spark = SparkSession.builder.appName("Read ORC File").getOrCreate()

# read an ORC file into a DataFrame
df = spark.read.orc("path/to/orc/file")

# show the first 10 rows of the DataFrame
df.show(10)

# stop the SparkSession
spark.stop()

В этом примере мы сначала создаем SparkSession, который является точкой входа в использование PySpark. Затем мы читаем файл ORC в PySpark DataFrame, используя метод spark.read.orc(). Наконец, мы показываем первые 10 строк DataFrame, используя метод show().

Запись ORC-файлов

Чтобы записать PySpark DataFrame в файл ORC, вы можете использовать метод DataFrame.write.orc(). Вот пример:

from pyspark.sql import SparkSession

# create a SparkSession
spark = SparkSession.builder.appName("Write ORC File").getOrCreate()

# create a DataFrame
data = [("Alice", 25), ("Bob", 30), ("Charlie", 35)]
df = spark.createDataFrame(data, ["name", "age"])

# write the DataFrame to an ORC file
df.write.orc("path/to/output/orc/file")

# stop the SparkSession
spark.stop()

В этом примере мы сначала создаем файл SparkSession. Затем мы создаем PySpark DataFrame с именем df с некоторыми примерами данных. Наконец, мы записываем DataFrame в файл ORC, используя метод DataFrame.write.orc().

Чтение и запись с параметрами

Вот некоторые из наиболее часто используемых параметров:

Чтение параметров

  • path: Путь к файлу ORC для чтения.
  • header: следует ли включать заголовок файла ORC в схему DataFrame. По умолчанию True.
  • inferSchema: следует ли автоматически выводить схему DataFrame из файла ORC. По умолчанию False.
  • ignoreLeadingWhiteSpace: Игнорировать ли начальные пробелы в файле ORC. По умолчанию False.
  • ignoreTrailingWhiteSpace: игнорировать ли конечные пробелы в файле ORC. По умолчанию False.
  • compression: Кодек сжатия для использования при чтении файла ORC. По умолчанию None.
  • columnNameOfCorruptRecord: имя столбца для поврежденных записей. По умолчанию _corrupt_record.
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("Read ORC").getOrCreate()

# Path to the ORC file to read
orc_path = "path/to/myfile.orc"

# Read the ORC file, infer the schema, and ignore leading/trailing whitespace
orc_df = spark.read.format("orc") \
                  .option("inferSchema", "true") \
                  .option("ignoreLeadingWhiteSpace", "true") \
                  .option("ignoreTrailingWhiteSpace", "true") \
                  .load(orc_path)

# Show the first 10 rows of the DataFrame
orc_df.show(10)

# Stop the SparkSession
spark.stop()

Запись параметров

  • path: Путь для записи файла ORC.
  • mode: Используемый режим записи. Допустимые варианты: append, overwrite, ignore и error.
  • compression: Кодек сжатия для использования при записи файла ORC. По умолчанию None.
  • compressionBlockSize: размер блока для сжатия. По умолчанию 256MB.
  • overwriteSchema: Следует ли перезаписывать существующую схему, если она уже существует. По умолчанию False.
  • rowIndexStride: индексный шаг для групп строк. По умолчанию 10000.
  • stripeSize: размер полосы для файла ORC. По умолчанию 64MB.
  • enableVectorizedReader: Включить ли векторизованный считыватель ORC. По умолчанию True.
  • enableVectorizedWriter: Включить ли векторизованный модуль записи ORC. По умолчанию True.
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("Write ORC").getOrCreate()

# Path to write the ORC file to
orc_path = "path/to/myfile.orc"

# DataFrame to write to the ORC file
df_to_write = ...

# Write the DataFrame to the ORC file with overwrite mode, Snappy compression, and a 128MB block size
df_to_write.write.format("orc") \
              .option("compression", "snappy") \
              .option("compressionBlockSize", "128MB") \
              .mode("overwrite") \
              .save(orc_path)

# Stop the SparkSession
spark.stop()

Обратите внимание, что в этих примерах показана только часть доступных параметров для чтения и записи файлов ORC в PySpark. Вы можете обратиться к документации PySpark за полным списком параметров и их описаниями.

Уникальные функции PySpark для чтения и записи файла ORC

PySpark предоставляет несколько уникальных функций для чтения и записи файлов ORC. Вот некоторые из наиболее заметных из них:

  1. Predicate pushdown:PySpark поддерживает predicate pushdown для файлов ORC, что означает, что он может помещать фильтры на уровень формата файла. Это может значительно повысить производительность запросов за счет уменьшения объема данных, которые необходимо прочитать с диска.
  2. Сокращение столбцов.PySpark поддерживает сокращение столбцов для файлов ORC, что означает, что он может выборочно считывать только те столбцы, которые необходимы для запроса. Это может уменьшить объем данных, которые необходимо прочитать с диска, и повысить производительность запросов.
  3. Векторная обработка.PySpark поддерживает векторизованную обработку файлов ORC, что означает, что он может обрабатывать сразу несколько строк, а не каждую строку по отдельности. Это может повысить производительность запросов за счет уменьшения накладных расходов, связанных с обработкой каждой строки.
  4. Сжатие.PySpark поддерживает различные кодеки сжатия для файлов ORC, включая Zlib, Snappy и LZO. Это может помочь уменьшить объем дискового пространства, необходимого для хранения файлов ORC, и может повысить производительность запросов за счет уменьшения объема данных, которые необходимо прочитать с диска.
  5. Эволюция схемы.PySpark поддерживает эволюцию схемы для файлов ORC, что означает, что он может обрабатывать изменения в схеме файла ORC с течением времени. Это может быть полезно в ситуациях, когда схема набора данных со временем меняется и ее необходимо обновлять для обеспечения обратной совместимости.

В целом, PySpark предоставляет богатый набор функций для работы с файлами ORC, что делает его мощным инструментом для работы с крупномасштабными наборами данных.

Преимущества PySpark для чтения/записи файлов ORC

  1. Масштабируемость.PySpark предназначен для обработки крупномасштабных наборов данных и может распределять вычисления между несколькими узлами в кластере. Это означает, что PySpark может обрабатывать наборы данных, которые слишком велики, чтобы поместиться в памяти на одном компьютере.
  2. Производительность. PySpark оптимизирован для повышения производительности и может использовать такие функции, как раскрытие предикатов, сокращение столбцов и векторизованная обработка, для повышения производительности запросов. Кроме того, PySpark может распараллеливать операции в кластере, что еще больше повышает производительность.
  3. Гибкость.PySpark поддерживает широкий спектр источников данных и форматов файлов, включая файлы ORC. Это означает, что PySpark можно использовать для обработки данных из различных источников и интегрировать в существующие конвейеры данных.
  4. Простота использования.PySpark предоставляет высокоуровневый API, который абстрагируется от многих сложностей распределенных вычислений. Это означает, что пользователи могут писать в PySpark код, похожий на код, написанный для одной машины, что упрощает работу с крупномасштабными наборами данных.
  5. Интеграция с другими инструментами.PySpark хорошо интегрируется с другими инструментами в экосистеме Apache Hadoop, такими как HDFS, Hive и HBase. Это означает, что PySpark можно использовать как часть более крупного конвейера обработки данных, в который входят другие инструменты экосистемы Hadoop.

В целом, PySpark предоставляет мощную и гибкую платформу для работы с файлами ORC, что делает его популярным выбором для инженеров по данным и специалистов по данным, работающих с крупномасштабными наборами данных.

Заключение

В этой статье мы узнали, как использовать API файлов PySpark ORC для чтения и записи данных. Затем мы можем использовать его для выполнения различных преобразований данных, анализа данных, науки о данных и т. д. Ознакомьтесь с другими моими статьями на PySpark API DataFrame, Основы SQL и Встроенные функции. Наслаждайся чтением.