Trabalhar com conectores de fonte de dados do Athena para o Apache Spark - Amazon Athena

Trabalhar com conectores de fonte de dados do Athena para o Apache Spark

Alguns conectores de fonte de dados do Athena estão disponíveis como conectores DSV2 do Spark. Os nomes dos conectores DSV2 do Spark têm um  sufixo -dsv2 (por exemplo, athena-dynamodb-dsv2).

A seguir, os conectores DSV2 atualmente disponíveis, seu nome de classe do Spark .format() e os links para a documentação sobre consultas federadas do Amazon Athena correspondente:

Conector DSV2 Nome da classe do Spark .format() Documentação
athena-cloudwatch-dsv2 com.amazonaws.athena.connectors.dsv2.cloudwatch.CloudwatchTableProvider CloudWatch
athena-cloudwatch-metrics-dsv2 com.amazonaws.athena.connectors.dsv2.cloudwatch.metrics.CloudwatchMetricsTableProvider Métricas do CloudWatch
atena-aws-cmdb-dsv2 com.amazonaws.athena.connectors.dsv2.aws.cmdb.AwsCmdbTableProvider CMDB
atena-dynamodb-dsv2 com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider DynamoDB

Para baixar arquivos .jar para os conectores DSV2, visite a página DSV2 da consulta federada do Amazon Athena no GitHub e veja a seção Lançamentos, Lançamento <versão>, Ativos.

Especificar o jar para o Spark

Para usar os conectores DSV2 do Athena com o Spark, você envia o arquivo .jar do conector para o ambiente do Spark que está usando. As seções a seguir descrevem casos específicos.

Athena para Spark

Para obter informações sobre como adicionar arquivos .jar personalizados e configurações personalizadas ao Amazon Athena para Apache Spark, consulte Usar as propriedades do Spark para especificar uma configuração personalizada.

Spark em geral

Para passar arquivo .jar do conector para o Spark, use o comando spark-submit e especifique o Aarquivo .jar na opção --jars, como no seguinte exemplo:

spark-submit \ --deploy-mode cluster \ --jars https://github.com/awslabs/aws-athena-query-federation-dsv2/releases/download/some_version/athena-dynamodb-dsv2-some_version.jar

Spark no Amazon EMR

Para executar um comando spark-submit com o  parâmetro --jars no Amazon EMR, você deve adicionar uma etapa ao cluster do Spark no Amazon. Para obter detalhes sobre como usar spark-submit no Amazon EMR, consulte Adicionar uma etapa do Spark no Guia de lançamento do Amazon EMR.

Spark para ETL do AWS Glue

Para ETL do AWS Glue, você pode passar a URL GitHub.com do arquivo .jar  para o argumento --extra-jars do comando aws glue start-job-run. A documentação do AWS Glue descreve o parâmetro --extra-jars seguindo um caminho do Amazon S3, mas o parâmetro também pode usar uma URL HTTPS. Para obter mais informações, consulte Referência de parâmetros de trabalho no Guia do desenvolvedor do AWS Glue.

Consultar o conector no Spark

Para enviar o equivalente à sua consulta federada existente do Athena no Apache Spark, use a função spark.sql(). Por exemplo, suponhamos que você tenha a consulta do Athena a seguir e deseje usar no Apache Spark.

SELECT somecola, somecolb, somecolc FROM ddb_datasource.some_schema_or_glue_database.some_ddb_or_glue_table WHERE somecola > 1

Para realizar a mesma consulta no Spark usando o conector DSV2 do Amazon Athena para DynamoDB, use o seguinte código:

dynamoDf = (spark.read .option("athena.connectors.schema", "some_schema_or_glue_database") .option("athena.connectors.table", "some_ddb_or_glue_table") .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") .load()) dynamoDf.createOrReplaceTempView("ddb_spark_table") spark.sql(''' SELECT somecola, somecolb, somecolc FROM ddb_spark_table WHERE somecola > 1 ''')

Especificar parâmetros

As versões DSV2 dos conectores de fonte de dados Athena usam os mesmos parâmetros dos conectores de fonte de dados Athena correspondentes. Para obter informações sobre parâmetros, consulte a documentação do conector de fonte de dados do Athena correspondente.

No código do PySpark, use a sintaxe a seguir para configurar os parâmetros.

spark.read.option("athena.connectors.conf.parameter", "value")

Por exemplo, o código a seguir define o parâmetro disable_projection_and_casing do conector Amazon Athena para o DynamoDB como always.

dynamoDf = (spark.read .option("athena.connectors.schema", "some_schema_or_glue_database") .option("athena.connectors.table", "some_ddb_or_glue_table") .option("athena.connectors.conf.disable_projection_and_casing", "always") .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") .load())