PySpark - partitionBy to S3 обрабатывать специальный символ - PullRequest
2 голосов
/ 27 мая 2020

У меня есть столбец с именем target_col_a в моем фрейме данных со значением Timestamp, которое было преобразовано в String, например 2020-05-27 08:00:00.

Я затем partitionBy этот столбец, как показано ниже.

target_dataset \
    .write.mode('overwrite') \
    .format('parquet') \
    .partitionBy('target_col_a') \
    .save('s3://my-bucket/my-path')

Однако мой путь s3 выглядит как s3://my-bucket/my-path/target_col_a=2020-05-27 08%3A00%3A00/part-0-file1.snappy.parquet

Есть ли способ вывести раздел без %3A и сохранить :?

Примечание: когда я используйте Glue native DynamicFrame для записи на S3 или Redshift UNLOAD на S3, разделение происходит по желанию (без %3A и с :), например

glueContext.write_dynamic_frame.from_options(
    frame = target_dataset,
    connection_type = "s3",
    connection_options = {
        "path": "s3://my-bucket/my-path/",
        "partitionKeys": ["target_col_a"]},
    format = "parquet",
    transformation_ctx = "datasink2"
)

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Такие символы, как пробелы и :, не могут быть частью какого-либо URI S3. Даже если каким-то образом удастся создать такой, вы будете сталкиваться с трудностями позже каждый раз, когда будете их использовать.

Лучше заменить эти символы на допустимые URI.

Вы должны следовать описанному соглашению об именах ключей в этом абзаце Рекомендации по ключевым словам в Amazon S3.

Следующие наборы символов обычно безопасны для использования в именах клавиш:

Буквы и цифры c символы [0-9a-zA-Z]

Специальные символы !, -, _, ., *, ', (, and )

1 голос
/ 27 мая 2020

Короткий ответ: нет, вы не можете.

Pyspark использует oop клиентские библиотеки для ввода и вывода. Эти библиотеки создают пути с использованием пакета URI Java . Пробелы и двоеточия не являются допустимыми символами URI, поэтому перед записью они закодированы в URL . Pyspark будет обрабатывать декодирование автоматически при чтении набора данных, но если вы хотите получить доступ к наборам данных за пределами Spark или Had oop, вам потребуется URL-декодирование значения столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...