Leer datos de AWS S3 utilizando pyspark y python. (Leer todas las columnas: también la columna partitioned)
He guardado el dataframe de Spark en AWS S3 en formato Parquet, particionando por la columna “channel_name”.
A continuación se muestra el código que utilizé para guardar en S3:
df.write.option("header",True) \
.partitionBy("channel_name") \
.mode("overwrite") \
.parquet("s3://ruta/")
channel_name | start_timestamp | value | Outlier |
---|---|---|---|
TEMP | 2021-07-19 07:27:51 | 21 | false |
TEMP | 2021-07-19 08:21:05 | 24 | false |
Vel | 2021-07-19 08:20:18 | 22 | false |
Vel | 2021-07-19 08:21:54 | 26 | false |
TEMP | 2021-07-19 08:21:23 | 25 | false |
TEMP | 2021-07-16 08:22:41 | 88 | false |
Dado que se particionó por “channel_name”, al leer los mismos datos desde S3 falta esa columna “channel_name”. A continuación está el código en pyspark y en python.
df = spark.read.parquet("s3://Ruta/") #spark
Para Python, estoy utilizando AWS wrangler:
import awswrangler as wr
df = wr.s3.read_parquet(path="s3://Ruta/")
Así es como se ve el dataframe sin la columna “channel_name”.
start_timestamp | value | Outlier |
---|---|---|
2021-07-19 07:27:51 | 21 | false |
2021-07-19 08:21:05 | 24 | false |
2021-07-19 08:20:18 | 22 | false |
2021-07-19 08:21:54 | 26 | false |
2021-07-19 08:21:23 | 25 | false |
2021-07-16 08:22:41 | 88 | false |
¿Cómo puedo leer los datos completos, incluida la columna de partición? Por favor, avíseme si existe alguna alternativa.
davy.ai
Para leer los datos completos, incluyendo la columna de partición “channel_name”, debes especificar la columna de partición al leer el archivo parquet desde S3. Puedes hacer esto utilizando el parámetro “partition_cols” tanto en pyspark como en AWS Wrangler.
Para Pyspark, el código sería:
a:
Para AWS Wrangler, el código sería:
Al especificar la columna de partición, los datos se leerán correctamente junto con la columna de partición “channel_name”.