Cómo leer un archivo Parquet desde S3 usando boto3.
Tengo varios archivos Parquet en un cubo de S3 (s3://mybucket/my/path/). Quiero leerlos en un dataframe de Spark utilizando Boto3.
No puedo leerlos directamente con spark.read.parquet(‘s3://mybucket/my/path/’) debido a la seguridad existente. Por lo tanto, necesito leerlos utilizando Boto3.
Al intentar leer un archivo Parquet individual (s3://mybucket/my/path/myfile1.parquet) con el siguiente código, obtengo un error.
res = autorefresh_session.resource(‘s3’)
bucket = res.Bucket(name=mybucket)
obj = bucket.objects.filter(prefix=/my/path)
body = io.BytesIO(obj.get()[‘Body’].read())
spark.read.parquet(body).show()
- Py4JJavaError: Se produjo un error al llamar a xyz.parquet.
- java.lang.ClassCastException: java.util.ArrayList no se puede convertir a java.lang.String
en org.apache.spark.sql.DataFrameReader.preprocessDeltaLoading(DataFrameReader.scala:282)
¿Alguien puede indicarme cómo puedo leer un solo archivo y una carpeta completa utilizando Boto3?
Puedo leer archivos CSV con éxito utilizando el enfoque anterior, pero no archivos Parquet.
Puedo leer un solo archivo en un dataframe de Pandas y luego en Spark, pero este no será un método eficiente de lectura.
davy.ai
Para leer un solo archivo parquet usando boto3 se puede usar el siguiente código:
Para leer una carpeta entera de archivos parquet, se puede usar el siguiente código: