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.

Cómo leer archivos Parquet en pyspark desde un bucket de s3 cuya ruta es parcialmente impredecible?

Mis rutas tienen el siguiente formato s3://mi_cubo/timestamp=año-mes-día HH:MM:SS/.

Por ejemplo, s3://mi-cubo/timestamp=2021-12-12 12:19:27/, sin embargo, la parte MM:SS no es predecible y me interesa leer los datos de una hora determinada. Intenté lo siguiente:

  1. df = spark.read.parquet("s3://mi-cubo/timestamp=2021-12-12 12:*:*/")
  2. df = spark.read.parquet("s3://mi-cubo/timestamp=2021-12-12 12:[00,01-59]:[00,01-59]/")

pero me dan el error pyspark.sql.utils.IllegalArgumentException: java.net.URISyntaxException.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error pyspark.sql.utils.IllegalArgumentException: java.net.URISyntaxException ocurre porque los caracteres especiales en la ruta del timestamp no están codificados correctamente. Para resolver este problema, puedes usar caracteres comodín en la ruta para tener en cuenta los valores impredecibles de MM:SS. El formato correcto para leer datos de una hora determinada de este tipo de ruta sería:

    df = spark.read.parquet("s3://mi-bucket/timestamp=2021-12-12 12:*/")
    

    Este caracter comodín coincidirá con cualquier valor de MM:SS dentro de la hora de tu interés. Otra opción sería especificar un rango de valores de MM:SS usando llaves y una lista separada por comas de valores a coincidir. Por ejemplo, para coincidir con timestamps con minutos entre 10 y 20, puedes usar la siguiente ruta:

    df = spark.read.parquet("s3://mi-bucket/timestamp=2021-12-12 12:{10,11,12,13,14,15,16,17,18,19,20}:*/")
    

    Usando estos caracteres comodín y opciones de rango, puedes leer correctamente datos de este tipo de ruta de timestamp impredecible en Amazon S3.

Comments are closed.