Usar o Delta Lake OSS com o EMR Sem Servidor
Amazon EMR 6.9.0 e versões posteriores
nota
O Amazon EMR 7.0.0 e versões superiores usam o Delta Lake 3.0.0, que renomeia o arquivo delta-core.jar
como delta-spark.jar
. Se você usa o Amazon EMR 7.0.0 ou superior, certifique-se de especificar delta-spark.jar
nas configurações.
O Amazon EMR 6.9.0 e versões posteriores incluem o Delta Lake, então você não precisa mais empacotar o Delta Lake por conta própria ou fornecer o sinalizador --packages
com trabalhos do EMR Sem Servidor.
-
Ao enviar trabalhos do EMR Sem Servidor, certifique-se de ter as propriedades de configuração a seguir e incluir os parâmetros no campo
sparkSubmitParameters
.--conf spark.jars=/usr/share/aws/delta/lib/delta-core.jar,/usr/share/aws/delta/lib/delta-storage.jar --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog
-
Crie um
delta_sample.py
local para testar a criação e a leitura de uma tabela do Delta.# delta_sample.py from pyspark.sql import SparkSession import uuid url = "s3://
amzn-s3-demo-bucket
/delta-lake/output/%s/" % str(uuid.uuid4()) spark = SparkSession.builder.appName("DeltaSample").getOrCreate() ## creates a Delta table and outputs to target S3 bucket spark.range(5).write.format("delta").save(url) ## reads a Delta table and outputs to target S3 bucket spark.read.format("delta").load(url).show -
Usando a AWS CLI, faça upload do arquivo
delta_sample.py
no bucket do Amazon S3. Em seguida, use o comandostart-job-run
para enviar um trabalho a uma aplicação existente do EMR Sem Servidor.aws s3 cp delta_sample.py s3://
amzn-s3-demo-bucket
/code/ aws emr-serverless start-job-run \ --application-idapplication-id
\ --execution-role-arnjob-role-arn
\ --name emr-delta \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket
/code/delta_sample.py", "sparkSubmitParameters": "--conf spark.jars=/usr/share/aws/delta/lib/delta-core.jar,/usr/share/aws/delta/lib/delta-storage.jar --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" } }'
Para usar bibliotecas do Python com o Delta Lake, você pode adicionar a biblioteca delta-core
empacotando-a como uma dependência ou usando-a como uma imagem personalizada.
Como alternativa, você pode usar SparkContext.addPyFile
para adicionar as bibliotecas do Python do arquivo JAR delta-core
:
import glob from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() spark.sparkContext.addPyFile(glob.glob("/usr/share/aws/delta/lib/delta-core_*.jar")[0])
Amazon EMR 6.8.0 e versões anteriores
Se estiver usando o Amazon EMR 6.8.0 ou inferior, siga estas etapas para usar o OSS do Delta Lake com as aplicações do EMR Sem Servidor.
-
Para criar uma versão de código aberto do Delta Lake
que seja compatível com a versão do Spark na aplicação do Amazon EMR Sem Servidor, navegue até o Delta GitHub e siga as instruções. -
Faça upload das bibliotecas do Delta Lake em um bucket do Amazon S3 na Conta da AWS.
-
Ao enviar trabalhos do EMR Sem Servidor na configuração da aplicação, inclua os arquivos JAR do Delta Lake que agora estão no bucket.
--conf spark.jars=s3://
amzn-s3-demo-bucket
/jars/delta-core_2.12-1.1.0.jar -
Para garantir que você possa ler e gravar em uma tabela do Delta, execute um exemplo de teste do PySpark.
from pyspark import SparkConf, SparkContext from pyspark.sql import HiveContext, SparkSession import uuid conf = SparkConf() sc = SparkContext(conf=conf) sqlContext = HiveContext(sc) url = "s3://
amzn-s3-demo-bucket
/delta-lake/output/1.0.1/%s/" % str(uuid.uuid4()) ## creates a Delta table and outputs to target S3 bucket session.range(5).write.format("delta").save(url) ## reads a Delta table and outputs to target S3 bucket session.read.format("delta").load(url).show