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 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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    df = spark.read.parquet("s3://Path/")
    

    a:

    df = spark.read.parquet("s3://ruta").partitionBy("channel_name")
    

    Para AWS Wrangler, el código sería:

    import awswrangler as wr
    df = wr.s3.read_parquet(path="s3://Ruta/", partition_cols=["channel_name"])
    

    Al especificar la columna de partición, los datos se leerán correctamente junto con la columna de partición “channel_name”.

Comments are closed.