Leia e write.orc arquivos .orc
Apache ORC é um formato de arquivo em coluna otimizado para cargas de trabalho analíticas em grande escala. Ele usa índices e estatísticas integrados para pular dados irrelevantes durante as leituras. O Databricks suporta ORC para leitura e gravação com Apache Spark, incluindo especificação de esquema, particionamento e compressão de gravação.
Pré-requisitos
A Databricks não exige configuração adicional para usar arquivos ORC. No entanto, para transmitir arquivos ORC, é necessário Auto Loader.
Opções
Use os métodos .option() e .options() de DataFrameReader e DataFrameWriter para configurar a fonte de dados ORC . Para obter uma lista completa das opções suportadas, consulte DataFrameReader Opções ORC e DataFrameWriter Opções ORC.
Uso
Os exemplos a seguir usam o dataset de exemplo Wanderbricks para demonstrar a leitura e gravação de arquivos ORC usando a API do Spark DataFrame e SQL.
Leia e write.orc arquivos .orc
- Python
- Scala
- SQL
# 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")
// 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")
-- Write wanderbricks reviews to ORC format
CREATE TABLE reviews_orc
USING ORC
AS SELECT * FROM samples.wanderbricks.reviews;
SELECT * FROM reviews_orc;
read.orc arquivos .orc usando SQL
Use read_files para consultar arquivos ORC diretamente do armazenamento em cloud usando SQL sem criar uma tabela.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_orc',
format => 'orc'
)
Especificar esquema
Especifique um esquema ao ler arquivos ORC para evitar a sobrecarga da inferência de esquema. Por exemplo, defina um esquema com os campos review_id, rating e comment e leia reviews_orc em um DataFrame.
- Python
- Scala
- SQL
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()
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()
-- 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;
Escrever arquivos ORC particionados
Escreva arquivos ORC particionados para desempenho de consulta otimizado em grandes conjuntos de dados. Por exemplo, leia samples.wanderbricks.bookings e o grave em bookings_orc_partitioned particionado por year e month derivado da coluna check_in.
- Python
- Scala
- SQL
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")
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")
-- 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 adicionais
- O que é Delta Lake no Databricks?: Se você está migrando de um ambiente Hive ou Hadoop usando ORC, Delta Lake é o formato nativo do Databricks recomendado. Adiciona transações ACID, imposição de esquema, viagem do tempo e desempenho de leitura otimizado sobre o armazenamento baseado em Parquet.
- Ler e gravar arquivos Parquet: Se sua carga de trabalho exige a maior compatibilidade de ecossistema fora do Databricks, Parquet é o formato colunar mais amplamente suportado entre mecanismos de consulta e ferramentas de armazenamento em nuvem.