Udostępnij za pośrednictwem


Praca z plikami ORC

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');