Puedo escribir en formato de parquet y dividirlo en una columna de esta manera:
jobname = args['JOB_NAME'] #header is a spark DataFrame header.repartition(1).write.parquet('s3://bucket/aws-glue/{}/header/'.format(jobname), 'append', partitionBy='date')Pero no puedo hacer esto con DynamicFrame de Glue.
header_tmp = DynamicFrame.fromDF(header, glueContext, "header") glueContext.write_dynamic_frame.from_options(frame = header_tmp, connection_type = "s3", connection_options = {"path": 's3://bucket/output/header/'}, format = "parquet") Intenté pasar la partitionBy como parte del dictamen de opciones de connection_options , ya que los documentos de AWS dicen que el parquet Glue no admite ninguna opción de formato, pero eso no funcionó.
¿Es esto posible y cómo? En cuanto a las razones para hacerlo de esta manera, pensé que era necesario para que funcionara el marcador de trabajo, ya que eso no funciona para mí actualmente.
De AWS Support (parafraseando un poco):
A partir de hoy, Glue no es compatible con el parámetro particiónPor cuando se escribe en parquet. Sin embargo, esto está en la tubería para ser trabajado.
Se requiere el uso de la API de Glue para escribir en parquet para que la función de marcado de trabajos funcione con fuentes S3.
Por lo tanto, a partir de hoy no es posible particionar archivos de parquet Y habilitar la función de marcado de trabajos.
Editar: hoy (23/3/18) encontré en las documentaciones :
glue_context.write_dynamic_frame.from_options( frame = projectedEvents, connection_options = {"path": "$outpath", "partitionKeys": ["type"]}, format = "parquet")Esa opción puede haber estado siempre allí y tanto yo como la persona de soporte de AWS la perdimos, o solo se agregó recientemente. De cualquier manera, parece que ahora es posible.
Uso algunas de las columnas de mi marco de datos como el objeto de claves de partición:
glueContext.write_dynamic_frame \ .from_options( frame = some_dynamic_dataframe, connection_type = "s3", connection_options = {"path":"some_path", "partitionKeys": ["month", "day"]}, format = "parquet")