У меня есть исходные данные в s3, и мое приложение spark / scala прочитает эти данные и запишет их в виде паркетных файлов после разделения их на новый столбец partition_id
.Значение partition_id
будет получено путем взятия первых двух символов из другого столбца id, имеющего буквенно-цифровую строку.Например:
id = 2dedfdg34h, partition_id = 2d
После записи данных в s3 будут созданы отдельные папки разделов для каждого раздела, и все выглядит хорошо.Например:
PRE partition_id=2d/
PRE partition_id=01/
PRE partition_id=0e/
PRE partition_id=fg/
PRE partition_id=5f/
PRE partition_id=jk/
PRE partition_id=06/
PRE partition_id=07/
Но когда я снова читаю эти файлы s3 в кадре данных, такие значения, как 1d
, 2d
и т. Д., Преобразуются в 1.0
, 2.0
.
Версия Spark: 2.4.0
Пожалуйста, предложите, как избежать этого неявного преобразования.
Команда, используемая для записи и чтения секционированных данных в / из s3:
dataframe.write.partitionBy("partition_id").option("compression", "gzip").parquet(<path>)
spark.read.parquet(<path>)