Tavoli Ilum
Ilum Tables è un formato Spark che funge da wrapper per i formati di dati Delta, Iceberg e Hudi. Consente di accedere e creare set di dati in questi formati utilizzando un'interfaccia unificata, con conseguente progettazione del codice più flessibile.
Importazione di tabelle Ilum
Per utilizzare Tavoli Ilum Dovresti includere formato ilum-spark pacchetto nel tuo Offerte di lavoro per Ilum. A tale scopo, è possibile aggiungere questa configurazione:
spark.jars.packages=cloud.ilum:ilum-spark-format:6.1.0
o aggiungendo il pacchetto come jar separato nelle risorse del tuo Ilum Job
Come includere il pacchetto nel tuo Applicazione Scala
- Utilizzo di sbt:
libraryDependencies += "cloud.ilum" % "ilum-spark-format" % "6.1.0"
- Utilizzo di Maven:
<dipendenza>
<groupId>cloud.ilumgroupId>
<artifactId>formato ilum-sparkartifactId>
<Versione>6.1.0Versione>
dipendenza>
- Utilizzo di gradle:
Gruppo di implementazione: 'cloud.ilum', nome: 'ilum-spark-format', versione: '6.1.0'
Come usarlo?
- Lettura e scrittura dei dati specificando 'formato ilum'
- Leggere e scrivere dati utilizzando Metodo ILUM
Per fare questo è necessario importarli in questo modo:
importazione nuvola.ilum.implicits.{
IlumDataFrameReader,
IlumDataFrameWriter,
IlumDataFrameWriterV2,
IlumDataStreamWriter,
IlumDataStreamReader
}
- Leggere e scrivere dati preconfigurando il catalogo ( writeTo, read.table)
Lettura
val filepath = "s3a://ilum-files/ilum-tables/table"
val tableFormat = Some("delta")
// without ilum method
val mydf = scintilla.leggere.format("ilum").opzione("tableFormat", tableFormat).load(filepath)
// with ilum method
val mydf2 = sparkSession.leggere.ilum(filePath, tableFormat)
Scrittura
val filepath = "s3a://ilum-files/ilum-tables/table"
val tableFormat = "delta"
val dati = Seq(
(1, "Alice"),
(2, "Bob"),
(3, "Cathy")
)
val Df = scintilla.createDataFrame(dati).toDF("id", "nome")
// using DataframeWriterV1
// you can use syntax like this
Df.scrivere.format("ilum").opzione("tableFormat", tableFormat).save(filepath)
// or you can use ilum function
Df.scrivere.ilum(filepath + "/1", format)
// using DataframeWriterV2 with preconfigured Delta catalog
val catalogo = "catalog"
val tavolo = "tablename"
Df.writeTo(s"${catalogo}.${tavolo}").ilum(format, None ).createOrReplace()
Streaming
Senza metodi Ilum
val filepath = "s3a://ilum-files/ilum-tables/streaming"
val tableFormat = "delta"
val input = scintilla.readStream
.format("ilum")
.opzione("tableFormat", tableFormat)
.load(filepath)
val quesito = input.writeStream
.outputMode("append")
.format("ilum")
.opzione("tableFormat", tableFormat)
.opzione("path", filepath + "_copy")
.opzione("checkpointLocation", filepath + "_checkpoint")
.start()
quesito.awaitTermination()
Con i metodi Ilum:
val filePath = s"s3a://ilum-files/ilum-tables/smth"
val tableFormat = Some("delta")
val Df = sparkSession.readStream.ilum(filePath, tableFormat)
val quesito = Df.writeStream
.opzione("checkpointLocation", filePath + "_checkpoint")
.ilum(filePath+"_copy", tableFormat)
quesito.awaitTermination()
Configurazione dei formati dei dati
Delta
Per utilizzare Delta, è necessario utilizzare queste configurazioni di spark:
spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension
spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog
spark.sql.warehouse.dir=s3a://ilum-files/ilum-warehouse
ed è necessario includere il pacchetto Delta nell'ambiente. A tale scopo, è possibile utilizzare l'immagine spark di Kubernetes con le estensioni delta preinstallato:
spark.kubernetes.container.image=ilum/spark:3.5.2-delta
o installare autonomamente il pacchetto di estensione richiesto
Iceberg
Per utilizzare Iceberg è necessario aggiungere queste configurazioni:
spark.sql.catalog.iceberg_catalog=org.apache.iceberg.spark.SparkSessionCatalog
spark.sql.catalog.iceberg_catalog.type=Alveare
spark.sql.catalog.iceberg_catalog, org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.iceberg_catalog.type=Hadoop
spark.sql.catalog.iceberg_catalog.warehouse=s3a://ilum-files/ilum-tables/iceberg/warehouse
e devi includere org.apache.iceberg:iceberg-spark-runtime-3.5_2.13:1.6.1 Pacchetto nell'ambiente aggiungendo il relativo file JAR alle risorse o aggiungendolo a configurazioni Spark come
questo:
spark.jars.packages=org.apache.iceberg:iceberg-spark-runtime-3.5_2.13:1.6.1
Hudi
Per utilizzare Hudi è necessario aggiungere queste configurazioni:
spark.serializer=org.apache.spark.serializer.KryoSerializer
spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSpearkSessionExtension
spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog
e importa org.apache.hudi:hudi-spark3.5-bundle_2.12:0.15.0 Pacchetto nell'ambiente aggiungendo il file JAR alle risorse o aggiungendolo alle configurazioni Spark in questo modo:
spark.jars.packages=org.apache.hudi:hudi-spark3.5-bundle_2.12:0.15.0