Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Apache ORC es un formato de archivo en columnas optimizado para cargas de trabajo analíticas a gran escala. Usa índices y estadísticas integrados para omitir los datos irrelevantes durante las lecturas. Azure Databricks admite ORC para leer y escribir con Apache Spark, incluida la especificación de esquema, la creación de particiones y la compresión de escritura.
Prerrequisitos
Azure Databricks no requiere configuración adicional para usar archivos ORC. Sin embargo, para transmitir archivos ORC, necesita cargador automático.
Options
Utilice los métodos .option() y .options() de DataFrameReader y DataFrameWriter para configurar orígenes de datos ORC. Para obtener una lista completa de las opciones admitidas, consulte DataFrameReader Opciones orc y DataFrameWriter opciones orc.
Usage
En los ejemplos siguientes se usa el conjunto de datos de ejemplo de Wanderbricks para demostrar la lectura y escritura de archivos ORC mediante spark DataFrame API y SQL.
Leer y escribir archivos 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;
Leer archivos ORC mediante SQL
Use read_files para consultar archivos ORC directamente desde el almacenamiento en la nube mediante SQL sin crear una tabla.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_orc',
format => 'orc'
)
Especificar un esquema
Especifique un esquema al leer archivos ORC para evitar la sobrecarga de la inferencia de esquema. Por ejemplo, defina un esquema con los campos review_id, rating y comment, y lea reviews_orc en un 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;
Escribir archivos ORC particionados
Escriba archivos ORC con particiones para optimizar el rendimiento de las consultas en grandes conjuntos de datos. Por ejemplo, lea samples.wanderbricks.bookings y escríbalo en bookings_orc_partitioned con particiones según year y month, derivados de la columna 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;
Recursos adicionales
- ¿Qué es Delta Lake en Azure Databricks?: si va a migrar desde un entorno de Hive o Hadoop mediante ORC, Delta Lake es el formato nativo de Databricks recomendado. Agrega transacciones ACID, aplicación de esquemas, viajes en tiempo y rendimiento de lectura optimizado sobre el almacenamiento basado en Parquet.
- Leer y escribir archivos Parquet: si la carga de trabajo requiere la compatibilidad más amplia del ecosistema fuera de Databricks, Parquet es el formato de columnas más compatible entre motores de consultas y herramientas de almacenamiento en la nube.