Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Apache ORC je sloupcový formát souboru optimalizovaný pro rozsáhlé analytické úlohy. Používá integrované indexy a statistiky k vynechání irelevantních dat během čtení. Azure Databricks podporuje ORC pro čtení i zápis pomocí Apache Sparku, včetně specifikace schématu, dělení a komprese zápisu.
Předpoklady
Azure Databricks nevyžaduje další konfiguraci pro použití souborů ORC. Ke streamování souborů ORC ale potřebujete Auto Loader.
Možnosti
Ke konfiguraci zdrojů dat ORC použijte metody .option() a .options() objektů DataFrameReader a DataFrameWriter. Úplný seznam podporovaných možností naleznete v DataFrameReadermožnostech ORC a DataFrameWritermožnostech ORC.
Usage
Následující příklady používají ukázkovou datovou sadu Wanderbricks k předvedení čtení a zápisu souborů ORC pomocí rozhraní API sparkového datového rámce a SQL.
Čtení a zápis souborů ORC
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;
Čtení souborů ORC pomocí SQL
Slouží read_files k dotazování souborů ORC přímo z cloudového úložiště pomocí SQL bez vytvoření tabulky.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_orc',
format => 'orc'
)
Zadání schématu
Při čtení souborů ORC zadejte schéma, abyste se vyhnuli režii odvozování schématu. Například definujte schéma s poli review_id, rating a comment a načtěte reviews_orc do objektu 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;
Zápis particionovaných souborů ORC
Zapište dělené soubory ORC pro optimalizovaný výkon dotazů u velkých datových sad. Můžete například číst z samples.wanderbricks.bookings a zapisovat do bookings_orc_partitioned, rozděleného podle year a month odvozených ze sloupce 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;
Dodatečné zdroje
- Co je Delta Lake v Azure Databricks?: Pokud migrujete z prostředí Hive nebo Hadoop pomocí ORC, delta Lake je doporučený nativní formát Databricks. Přidává transakce ACID, vynucení schématu, cestování v čase a optimalizovaný výkon při čtení nad úložištěm založeným na formátu Parquet.
- Čtení a zápis souborů Parquet: Pokud vaše úloha vyžaduje nejširší kompatibilitu ekosystému mimo Databricks, parquet je nejrozšířenější sloupcový formát napříč dotazovacími moduly a nástroji cloudového úložiště.