我已经使用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()