Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Apache ORC är ett kolumnformat som är optimerat för storskaliga analytiska arbetsbelastningar. Den använder inbyggda index och statistik för att hoppa över irrelevanta data under läsningar. Azure Databricks stöder ORC för både läsning och skrivning med Apache Spark, inklusive schemaspecifikation, partitionering och skrivkomprimering.
Förutsättningar
Azure Databricks kräver inte ytterligare konfiguration för att använda ORC-filer. Om du vill strömma ORC-filer behöver du dock automatisk inläsning.
Options
Använd metoderna .option() och .options() för DataFrameReader och DataFrameWriter för att konfigurera ORC-datakällor. En fullständig lista över alternativ som stöds finns i DataFrameReader ORC-alternativ och DataFrameWriter ORC-alternativ.
Usage
I följande exempel används Wanderbricks-exempeldatamängden för att demonstrera läsning och skrivning av ORC-filer med Spark DataFrame API och SQL.
Läsa och skriva ORC-filer
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;
Läsa ORC-filer med SQL
Använd read_files för att fråga ORC-filer direkt från molnlagring med SQL utan att skapa en tabell.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_orc',
format => 'orc'
)
Ange ett schema
Ange ett schema när du läser ORC-filer för att undvika omkostnaderna för schemainferens. Definiera till exempel ett schema med review_idfälten , ratingoch comment och läsa reviews_orc in i en 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;
Skriva partitionerade ORC-filer
Skriv partitionerade ORC-filer för optimerad frågeprestanda på stora datamängder. Till exempel, läs samples.wanderbricks.bookings och skriv till bookings_orc_partitioned, partitionerad efter year och month som härleds från kolumnen 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.{year, month}
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;
Ytterligare resurser
- Vad är Delta Lake i Azure Databricks?: Om du migrerar från en Hive- eller Hadoop-miljö med ORC är Delta Lake det rekommenderade Databricks-inbyggda formatet. Den lägger till ACID-transaktioner, schemaframtvingande, tidsresor och optimerad läsprestanda ovanpå Parquet-baserad lagring.
- Läs och skriv Parquet-filer: Om din arbetsbelastning kräver den bredaste ekosystemkompatibiliteten utanför Databricks är Parquet det kolumnformat som stöds mest för frågemotorer och molnlagringsverktyg.