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<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())