amazon-web-services - PySpark - partitionBy 到 S3 处理特殊字符

标签 amazon-web-services amazon-s3 pyspark

我有一个名为 target_col_a 的专栏在我的数据框中,时间戳值已转换为字符串,例如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 原生时 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"
)

最佳答案

简短的回答是否定的,你不能。

Pyspark 使用 hadoop 客户端库进行输入和输出。这些库使用 Java URI package 创建路径.空格和冒号不是有效的 URI 字符,所以它们是 URL encoded在写作之前。 Pyspark 将在读取数据集时自动处理解码,但如果您想访问 Spark 或 Hadoop 之外的数据集,则需要 URL decode列值。

关于amazon-web-services - PySpark - partitionBy 到 S3 处理特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62038107/

相关文章:

amazon-s3 - CloudFront 为第二个源提供 403

python - 如何在pyspark中获取连续的id

amazon-web-services - 如何将目标添加到 CloudFormation 中的网络负载均衡器

amazon-web-services - AWS 服务无法承担角色

amazon-web-services - 用 ESP8266 连接手机

php - 使用 AWS 弹性 Beanstalk 的 FTP

java - 如何使用Spring Boot Web应用程序将对象放入AWS S3存储桶

objective-c - 使用UIWebView调用Upload方法

arrays - 检查另一个数组中存在的数组的所有元素

python - 将生成的 TFIDF 稀疏向量链接到 Spark 中的原始文档