Чтение паркетной секционированной таблицы из S3 с использованием pyspark сбрасывает начальные нули из столбца раздела - PullRequest
0 голосов
/ 11 апреля 2020

Я написал фрейм данных pyspark как паркет для s3, используя EMR (pyspark), эти данные разделены на столбец (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| ..|

1 Ответ

0 голосов
/ 13 апреля 2020

Нашел решение этой проблемы в дельте документации.

У Spark свойство по умолчанию включено. С помощью этого свойства spark пытается определить схему столбца раздела. Для столбца разбиения строкового типа мы можем легко go опередить и отключить его.

# 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()
...