Entonces, soy nuevo en AWS S3, Pyspark y Linux. No estoy seguro de por donde empezar. Aquí está mi pregunta:
En Linux, puedo emitir el siguiente comando y puedo ver los archivos en la carpeta:
aws s3 ls 's3://datastore/L2/parquet'Hacer algo similar con python no funciona
import os os.listdir('s3://datastore/L2/parquet')Da error:
Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [Errno 2] No such file or directory: 's3://datastore/L2/parquet' Sin embargo, pyspark y SQLContext.read.parquet lo entienden bien:
from pyspark.sql import SQLContext sqlContext = SQLContext(sc) df = sqlContext.read.parquet('s3://datastore/L2/parquet') ¿Alguna razón por la que funciona en SQLContext y no funciona en os.listdir ? ¿Por dónde puedo empezar a aclarar mi confusión? Cualquier respuesta además de 'obtener una licenciatura en cs' sería útil.
Entonces, AWS s3 no es lo mismo que el sistema de archivos de su sistema operativo. El comando AWS s3 ls y los comandos pyspark SQLContext.read están haciendo algo diferente al comando os.listdir , que no sabe cómo leer cosas de s3.
Para leer cosas de s3, recomiendo mirar la biblioteca boto3, o la biblioteca s3fs, que es un contenedor alrededor de boto3 que trata a s3 más como un sistema de archivos. Hay una variedad de opciones dentro de boto3 para listar depósitos y archivos dentro de depósitos.
En términos de implementación, los depósitos y los objetos son recursos, y Amazon S3 proporciona API para que los administre.
Si no sabe cómo funciona el sistema de archivos de Linux, le recomiendo leer sobre él, tal vez algo como esto sea útil.