使用pyspark从S3中读取镶木地板分区表是从分区列中删除前导零



我已经使用EMR(pyspark(将pyspark数据帧作为parquet写入s3,该数据由StringType((列(a(分区

在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| ..|

在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()

最新更新