Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Apache ORC — это формат столбцов, который обеспечивает оптимизацию ускорения запросов. Это эффективнее, чем CSV или JSON. Azure Databricks поддерживает ORC для чтения и записи с помощью Apache Spark. Дополнительные сведения см. в документации Apache Spark по файлам ORC.
Необходимые условия
Azure Databricks не требует дополнительной настройки для использования файлов ORC. Однако для потоковой передачи файлов ORC требуется автозагрузчик.
Настройка и использование ORC с API кадра данных
Используйте API DataFrame Apache Spark для чтения и записи файлов ORC, если требуется полный контроль над схемой, секционированием или поведением записи.
Параметры чтения и записи
Ознакомьтесь со следующими справочными статьями Apache Spark для поддерживаемых параметров чтения и записи API кадра данных.
Чтение и запись ФАЙЛОВ ORC
Например, чтение data.orc в кадр df данных и запись в него orc_output.
Python
# Read an ORC file into a DataFrame
df = spark.read.format("orc").load("/tmp/data.orc")
df.show()
# Write a DataFrame to ORC format
df.write.format("orc").save("/tmp/orc_output")
# Write with overwrite mode
df.write.format("orc").mode("overwrite").save("/tmp/orc_output")
Scala
// Read an ORC file into a DataFrame
val df = spark.read.format("orc").load("/tmp/data.orc")
df.show()
// Write a DataFrame to ORC format
df.write.format("orc").save("/tmp/orc_output")
// Write with overwrite mode
df.write.format("orc").mode("overwrite").save("/tmp/orc_output")
SQL
-- Query ORC files directly
SELECT * FROM orc.`/tmp/data.orc`;
-- Create a table from ORC files
CREATE TABLE orc_table
USING ORC
OPTIONS (path "/tmp/data.orc");
SELECT * FROM orc_table;
Чтение ФАЙЛОВ ORC со спецификацией схемы
Укажите схему при чтении файлов ORC, чтобы избежать затрат на вывод схемы. Например, определите схему с полями name, age и city, и считайте data.orc в кадр данных df.
Python
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
schema = StructType([
StructField("name", StringType(), True),
StructField("age", IntegerType(), True),
StructField("city", StringType(), True)
])
df = spark.read.format("orc").schema(schema).load("/tmp/data.orc")
df.printSchema()
df.show()
Scala
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}
val schema = StructType(Array(
StructField("name", StringType, nullable = true),
StructField("age", IntegerType, nullable = true),
StructField("city", StringType, nullable = true)
))
val df = spark.read.format("orc").schema(schema).load("/tmp/data.orc")
df.printSchema()
df.show()
SQL
-- Create a table with an explicit schema from ORC files
CREATE TABLE orc_table (
name STRING,
age INT,
city STRING
)
USING ORC
OPTIONS (path "/tmp/data.orc");
SELECT * FROM orc_table;
Запись секционированных ФАЙЛОВ ORC
Запись секционированных ФАЙЛОВ ORC для оптимизации производительности запросов на большие наборы данных. Например, создайте кадр df данных с year, monthnameа также столбцы и amount запишите его в partitioned_orc секционированные year и month.
Python
df = spark.createDataFrame(
[
(2023, 1, "Alice", 100),
(2023, 1, "Bob", 200),
(2023, 2, "Alice", 150),
(2024, 1, "Alice", 300),
],
["year", "month", "name", "amount"]
)
# Write partitioned by year and month
df.write.format("orc").partitionBy("year", "month").save("/tmp/partitioned_orc")
Scala
val df = Seq(
(2023, 1, "Alice", 100),
(2023, 1, "Bob", 200),
(2023, 2, "Alice", 150),
(2024, 1, "Alice", 300)
).toDF("year", "month", "name", "amount")
// Write partitioned by year and month
df.write.format("orc").partitionBy("year", "month").save("/tmp/partitioned_orc")
SQL
-- Create a partitioned ORC table
CREATE TABLE partitioned_orc_table (
name STRING,
amount INT
)
USING ORC
PARTITIONED BY (year INT, month INT);
Чтение ФАЙЛОВ ORC с помощью SQL
Используется read_files для запроса файлов ORC непосредственно из облачного хранилища с помощью SQL без создания таблицы. Например, запросите ФАЙЛ ORC, хранящийся в облачном хранилище, с помощью пути к файлу и orc описателя формата.
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.orc',
format => 'orc'
)
Установите сжатие ORC
Настройте сжатие ORC с помощью compression параметра. Поддерживаемые кодеки включают none, snappyи zliblzo. Например, записать df в compressed_orc с использованием сжатия zlib, или в snappy_orc с использованием сжатия snappy.
Python
# Write with zlib compression
df.write.format("orc").option("compression", "zlib").save("/tmp/compressed_orc")
# Write with snappy compression (default)
df.write.format("orc").option("compression", "snappy").save("/tmp/snappy_orc")
Scala
// Write with zlib compression
df.write.format("orc").option("compression", "zlib").save("/tmp/compressed_orc")
// Write with snappy compression (default)
df.write.format("orc").option("compression", "snappy").save("/tmp/snappy_orc")
SQL
-- Create an ORC table with zlib compression
CREATE TABLE compressed_orc_table (
name STRING,
age INT,
city STRING
)
USING ORC
TBLPROPERTIES ('orc.compress' = 'ZLIB');
-- Create an ORC table with snappy compression
CREATE TABLE snappy_orc_table (
name STRING,
age INT,
city STRING
)
USING ORC
TBLPROPERTIES ('orc.compress' = 'SNAPPY');