Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Apache ORC to format pliku kolumnowego, który zapewnia optymalizacje pod kątem przyspieszania zapytań. Jest on bardziej wydajny niż plik CSV lub JSON. Usługa Azure Databricks obsługuje format ORC zarówno do odczytu, jak i zapisu na platformie Apache Spark. Aby uzyskać więcej informacji, zobacz dokumentację platformy Apache Spark dotyczącą plików ORC.
Wymagania wstępne
Usługa Azure Databricks nie wymaga dodatkowej konfiguracji do korzystania z plików ORC. Jednak do streamingu plików ORC potrzebny jest Auto Loader.
Konfigurowanie i używanie ORC z interfejsem API DataFrame
Użyj interfejsu API ramki danych platformy Apache Spark, aby odczytywać i zapisywać pliki ORC, gdy potrzebujesz pełnej kontroli nad schematem, partycjonowaniem lub zachowaniem zapisu.
Opcje odczytu i zapisu
Zapoznaj się z następującymi artykułami referencyjnymi platformy Apache Spark, aby zapoznać się z obsługiwanymi opcjami odczytu i zapisu interfejsu API ramki danych.
Odczytywanie i zapisywanie plików ORC
Na przykład odczytaj data.orc do DataFrame df i zapisz go do 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 - język programowania
// 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;
Odczytywanie plików ORC ze specyfikacją schematu
Określ schemat podczas odczytywania plików ORC, aby uniknąć narzutu wnioskowania schematu. Na przykład zdefiniuj schemat za pomocą pól name, age i city i odczytaj data.orc do ramki danych 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 - język programowania
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;
Zapisywanie partycjonowanych plików ORC
Zapisywanie partycjonowanych plików ORC pod kątem zoptymalizowanej wydajności zapytań w dużych zestawach danych. Na przykład utwórz ramkę danych df z kolumnami year, month, name i amount, a następnie zapisz ją do partitioned_orc, partycjonując według year i 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 - język programowania
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);
Odczytywanie plików ORC przy użyciu języka SQL
Służy read_files do wykonywania zapytań dotyczących plików ORC bezpośrednio z magazynu w chmurze przy użyciu języka SQL bez tworzenia tabeli. Na przykład wykonaj zapytanie dotyczące pliku ORC przechowywanego w magazynie w chmurze przy użyciu ścieżki do pliku i orc specyfikatora formatu.
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.orc',
format => 'orc'
)
Ustawianie kompresji ORC
Skonfiguruj kompresję ORC, używając opcji compression. Obsługiwane kodece obejmują none, , snappyzlibi lzo. Na przykład zapisz df do compressed_orc przy użyciu kompresji zlib lub do snappy_orc przy użyciu kompresji 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 - język programowania
// 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');