Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Apache ORC — это формат столбцов, оптимизированный для крупномасштабных аналитических рабочих нагрузок. Он использует встроенные индексы и статистику для пропуска неуместных данных во время чтения. Azure Databricks поддерживает ORC для чтения и записи с помощью Apache Spark, включая спецификацию схемы, секционирование и сжатие записи.
Необходимые условия
Azure Databricks не требует дополнительной настройки для использования файлов ORC. Однако для потоковой передачи файлов ORC требуется автозагрузчик.
Options
Используйте методы .option() и .options() классов DataFrameReader и DataFrameWriter для настройки источников данных ORC. Полный список поддерживаемых параметров см. в разделе DataFrameReader "Параметры ORC " и DataFrameWriter "Параметры ORC".
Usage
В следующих примерах используется образец набора данных Wanderbricks для демонстрации чтения и записи ФАЙЛОВ ORC с помощью API и SQL Spark DataFrame.
Чтение и запись ФАЙЛОВ ORC
Python
# Write wanderbricks reviews to ORC format
df = spark.read.table("samples.wanderbricks.reviews")
df.write.format("orc").save("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
# Read an ORC file into a DataFrame
df = spark.read.format("orc").load("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
display(df)
# Write with overwrite mode
df.write.format("orc").mode("overwrite").save("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
Scala
// Write wanderbricks reviews to ORC format
val reviews = spark.read.table("samples.wanderbricks.reviews")
reviews.write.format("orc").save("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
// Read an ORC file into a DataFrame
val df = spark.read.format("orc").load("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
df.show()
// Write with overwrite mode
df.write.format("orc").mode("overwrite").save("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
SQL
-- Write wanderbricks reviews to ORC format
CREATE TABLE reviews_orc
USING ORC
AS SELECT * FROM samples.wanderbricks.reviews;
SELECT * FROM reviews_orc;
Чтение ФАЙЛОВ ORC с помощью SQL
Используется read_files для запроса файлов ORC непосредственно из облачного хранилища с помощью SQL без создания таблицы.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_orc',
format => 'orc'
)
Указание схемы
Укажите схему при чтении файлов ORC, чтобы избежать затрат на вывод схемы. Например, определите схему с полями review_id, rating и comment и считайте reviews_orc в DataFrame.
Python
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
schema = StructType([
StructField("review_id", StringType(), True),
StructField("rating", IntegerType(), True),
StructField("comment", StringType(), True)
])
df = spark.read.format("orc").schema(schema).load("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
df.printSchema()
df.show()
Scala
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}
val schema = StructType(Array(
StructField("review_id", StringType, nullable = true),
StructField("rating", IntegerType, nullable = true),
StructField("comment", StringType, nullable = true)
))
val df = spark.read.format("orc").schema(schema).load("/Volumes/<catalog>/<schema>/<volume>/reviews_orc")
df.printSchema()
df.show()
SQL
-- Create a table with an explicit schema from ORC files
CREATE TABLE reviews_orc (
review_id STRING,
rating INT,
comment STRING
)
USING ORC
OPTIONS (path "/Volumes/<catalog>/<schema>/<volume>/reviews_orc");
SELECT * FROM reviews_orc;
Запись секционированных ФАЙЛОВ ORC
Запись секционированных ФАЙЛОВ ORC для оптимизации производительности запросов на большие наборы данных. Например, прочитать samples.wanderbricks.bookings и записать его в bookings_orc_partitioned с разбиением по year и month, полученным из столбца check_in.
Python
from pyspark.sql.functions import year, month
df = spark.read.table("samples.wanderbricks.bookings")
df_with_parts = df.withColumn("year", year("check_in")).withColumn("month", month("check_in"))
df_with_parts.write.format("orc").partitionBy("year", "month").save("/Volumes/<catalog>/<schema>/<volume>/bookings_orc_partitioned")
Scala
import org.apache.spark.sql.functions.{col, month, year}
val bookings = spark.read.table("samples.wanderbricks.bookings")
val bookingsWithParts = bookings.withColumn("year", year(col("check_in"))).withColumn("month", month(col("check_in")))
bookingsWithParts.write.format("orc").partitionBy("year", "month").save("/Volumes/<catalog>/<schema>/<volume>/bookings_orc_partitioned")
SQL
-- Write partitioned ORC files by year and month
CREATE TABLE bookings_orc_partitioned
USING ORC
PARTITIONED BY (year, month)
AS SELECT *, year(check_in) AS year, month(check_in) AS month
FROM samples.wanderbricks.bookings;
Дополнительные ресурсы
- Что такое Delta Lake в Azure Databricks?: Если вы переходите из среды Hive или Hadoop, использующей ORC, Delta Lake — это рекомендуемый собственный формат Databricks. Он добавляет транзакции ACID, контроль схемы, доступ к предыдущим версиям данных и оптимизированную скорость чтения поверх хранилища на базе Parquet.
- Чтение и запись файлов Parquet. Если для рабочей нагрузки требуется самая широкая совместимость экосистемы за пределами Databricks, Parquet является наиболее широко поддерживаемым форматом столбцов в обработчиках запросов и средствах облачного хранилища.