es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leer datos de s3 utilizando la máquina local – pyspark

from pyspark.sql import SparkSession
import boto3
import os
import pandas as pd

spark = SparkSession.builder.getOrCreate()

hadoop_conf = spark.sparkContext.jsc.hadoopConfiguration()
hadoop_conf.set("fs.s3.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.access.key", "myaccesskey")
hadoop_conf.set("fs.s3a.secret.key", "mysecretkey")
hadoop_conf.set("fs.s3a.endpoint", "s3.amazonaws.com")
hadoop_conf.set("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider")
hadoop_conf.set("fs.s3a.connection.ssl.enabled", "true")

conn = boto3.resource("s3", region_name="us-east-1")

df = spark.read.csv("s3a://mani-test-1206/test/test.csv", header=True)
df.show()

spark.stop()

Al ejecutar el código anterior, tuve el siguiente error:

java.io.IOException: From option fs.s3a.aws.credentials.provider java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider not found

Jars de Hadoop y AWS que el programa está utilizando:

spark-hadoop-distribution: spark-3.2.0-bin-hadoop3.2

Jars de Hadoop:
hadoop-annotations-3.2.0.jar
hadoop-auth-3.2.0.jar
hadoop-aws-3.2.0.jar
hadoop-client-api-3.3.1.jar
hadoop-client-runtime-3.3.1.jar
hadoop-common-3.2.0.jar
hadoop-hdfs-3.2.0.jar

Jars de AWS:

aws-java-sdk-1.11.624.jar
aws-java-sdk-core-1.11.624.jar
aws-java-sdk-dynamodb-1.11.624.jar
aws-java-sdk-s3-1.11.624.jar

Cualquier ayuda será muy apreciada. Gracias.
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error sugiere que el programa no puede encontrar la clase org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider, la cual es necesaria para proporcionar credenciales de AWS para acceder a S3 a través de Hadoop.

    Para solucionar esto, puedes intentar agregar la siguiente dependencia a tu archivo de construcción (build file):

    <dependency>
      <groupid>org.apache.hadoop</groupid>
      <artifactid>hadoop-aws</artifactid>
      <version>$HADOOP_VERSION</version>
    </dependency>
    

    Asegúrate de reemplazar $HADOOP_VERSION con la versión de Hadoop que estás utilizando (en este caso, 3.2.0).

    Alternativamente, puedes intentar agregar la siguiente línea antes de establecer la propiedad fs.s3a.aws.credentials.provider:

    hadoop_conf.set("fs.s3a.aws.credentials.provider","org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider")
    

    Esto utiliza un proveedor de credenciales diferente que puede estar disponible en tu versión de Hadoop.

    Una vez que hayas realizado los cambios necesarios, intenta ejecutar el programa nuevamente y verifica si el error persiste.

Comments are closed.