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 que proporciona optimizaciones para acelerar las consultas. Es más eficaz que CSV o JSON. Azure Databricks admite ORC para leer y escribir con Apache Spark. Para más información, consulte la documentación de Apache Spark sobre archivos ORC.
Prerrequisitos
Azure Databricks no requiere configuración adicional para usar archivos ORC. Sin embargo, para transmitir archivos ORC, necesita cargador automático.
Configuración y uso de ORC con dataFrame API
Use la API DataFrame de Apache Spark para leer y escribir archivos ORC cuando necesite un control total sobre el esquema, la creación de particiones o el comportamiento de escritura.
Opciones de lectura y escritura
Revise los siguientes artículos de referencia de Apache Spark para ver las opciones de lectura y escritura de dataFrame API admitidas.
Leer y escribir archivos ORC
Por ejemplo, lea data.orc en un DataFrame df, y escríbalo en 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
// 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;
Leer archivos ORC con especificación de esquema
Especifique un esquema al leer archivos ORC para evitar la sobrecarga de la inferencia de esquema. Por ejemplo, defina un esquema con name, age y city y lea data.orc en un DataFrame 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
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;
Escribir archivos ORC particionados
Escriba archivos ORC con particiones para optimizar el rendimiento de las consultas en grandes conjuntos de datos. Por ejemplo, cree un dataframe df con yearcolumnas , month, namey amount y escríbalo en partitioned_orc particionado por year y 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
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);
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. Por ejemplo, consulte un archivo ORC almacenado en el almacenamiento en la nube mediante la ruta de acceso al archivo y al especificador de orc formato.
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.orc',
format => 'orc'
)
Establecimiento de la compresión ORC
Configure la compresión ORC mediante la compression opción . Los códecs admitidos incluyen none, snappy, zliby lzo. Por ejemplo, escriba df a compressed_orc utilizando zlib compresión, o a snappy_orc utilizando snappy compresión.
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
// 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');