【问题标题】:Reading parquet partitioned table from S3 using pyspark is dropping leading zeros from partition column使用 pyspark 从 S3 读取 parquet 分区表正在从分区列中删除前导零
【发布时间】:2020-07-23 22:34:43
【问题描述】:

我已经使用 EMR(pyspark) 将 pyspark 数据帧作为镶木地板写入 s3,该数据由列 (A) 分区,即 StringType()

在 S3 中,数据看起来像这样

table_path:
       A=0003
           part-file.parquet
       A=C456
           part-file.parquet

当我使用 pyspark 将其作为数据帧读回时,我在数据帧的“A”列中丢失了前导零。这是数据的样子

df =  spark.read.parquet(table_path)
df.show()

| A  | B |
| 3  | ..|
|C456| ..|

我不想在这里丢失前导零。预期结果是:

| A  | B |
|0003| ..|
|C456| ..|

【问题讨论】:

    标签: python apache-spark pyspark parquet


    【解决方案1】:

    在 delta 文档中找到了此问题的解决方案。

    Spark 有一个默认启用的属性。使用此属性 spark 尝试推断分区列的架构。对于字符串类型的分区列,我们可以轻松将其关闭。

    # Update partition data type infer property
    from pyspark.conf import SparkConf
    from pyspark.sql import SparkSession, Window
    conf = (SparkConf().set("spark.sql.sources.partitionColumnTypeInference.enabled", False))
    sc=SparkSession.builder.config(conf=conf).getOrCreate()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2021-03-02
      • 2019-11-22
      • 2019-07-29
      • 2020-05-11
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多