Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Apache ORC is een kolombestandsindeling die is geoptimaliseerd voor grootschalige analytische workloads. Er worden ingebouwde indexen en statistieken gebruikt om irrelevante gegevens tijdens leesbewerkingen over te slaan. Azure Databricks ondersteunt ORC voor zowel lezen als schrijven met Apache Spark, waaronder schemaspecificatie, partitionering en schrijfcompressie.
Vereiste voorwaarden
Azure Databricks vereist geen aanvullende configuratie voor het gebruik van ORC-bestanden. Als u ORC-bestanden wilt streamen, hebt u echter automatische laadprogramma's nodig.
Options
Gebruik de .option() en .options() methoden van DataFrameReader en DataFrameWriter om ORC-gegevensbronnen te configureren. Zie ORC-opties en DataFrameReader ORC-opties voor een volledige lijst met ondersteunde optiesDataFrameWriter.
Usage
In de volgende voorbeelden wordt de Wanderbricks-voorbeeldgegevensset gebruikt om orc-bestanden te lezen en te schrijven met behulp van de Spark DataFrame-API en SQL.
ORC-bestanden lezen en schrijven
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-bestanden lezen met SQL
Gebruik read_files dit om query's uit te voeren op ORC-bestanden rechtstreeks vanuit cloudopslag met behulp van SQL zonder een tabel te maken.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_orc',
format => 'orc'
)
Een schema opgeven
Geef een schema op bij het lezen van ORC-bestanden om de overhead van schemadeductie te voorkomen. Definieer bijvoorbeeld een schema met de velden review_id, rating en comment en lees reviews_orc in in een 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;
Gepartitioneerde ORC-bestanden schrijven
Schrijf gepartitioneerde ORC-bestanden voor geoptimaliseerde queryprestaties op grote gegevenssets. Lees samples.wanderbricks.bookings en schrijf deze bijvoorbeeld naar bookings_orc_partitioned gepartitioneerd door year en month afgeleid van de check_in kolom.
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;
Aanvullende bronnen
- Wat is Delta Lake in Azure Databricks?: Als u migreert vanuit een Hive- of Hadoop-omgeving met behulp van ORC, is Delta Lake de aanbevolen Databricks-systeemeigen indeling. Het voegt ACID-transacties, schemahandhaving, time travel en geoptimaliseerde leesprestaties toe aan op Parquet gebaseerde opslag.
- Parquet-bestanden lezen en schrijven: als uw workload de breedste ecosysteemcompatibiliteit buiten Databricks vereist, is Parquet de meest ondersteunde kolomindeling voor query-engines en hulpprogramma's voor cloudopslag.