У меня есть некоторые данные, которые я пытаюсь сохранить в файл паркета с помощью PySpark, а затем загрузить в корзину S3.Эти данные содержат столбец даты, который должен быть в формате YYYY/MM
.
Когда я сохраняю фрейм данных Spark локально, формат является правильным, и когда я загружаю его с помощью интерфейса командной строки AWS, форматтоже правильно.Однако когда я использую Boto3 SDK и функцию upload_file
, столбец даты преобразуется в формат YYYY-MM-DD
.Этот процесс начал происходить недавно, так как он работал без проблем несколько месяцев назад.Я не думаю, что мы изменили версию Boto3 в какое-то время - 1.7.33
Код SDK: s3_client.upload_file('/'.join(path.split('/')[:-1])+'/'+file_name, s3_bucket,"/".join(options["file_location"].split("/")[3:])+'/'+file_name,ExtraArgs={'ServerSideEncryption':'AES256','ACL':'bucket-owner-read'})
Код CLI: copy_file_cmd = 'aws s3 cp {path} {s3_location} --sse AES256'. \
format(path=service_temp_loc + '/' + options['file_name'], \
s3_location=options['file_location'] + options['file_name'])
пример данных:
правильно:
2018/03 NULL AFS USD NULL test1 test2 test3 154404189.4 MarOL
2018/04 NULL AFS USD NULL test1 test2 test3 299628349.7 MarOL
2018/05 NULL AFS USD NULL test1 test2 test3 453738680.6 MarOL
2018/06 NULL AFS USD NULL test1 test2 test3 589610947.2 MarOL
2018/07 NULL AFS USD NULL test1 test2 test3 735510224.6 MarOL
2018/08 NULL AFS USD NULL test1 test2 test3 867543313.9 MarOL
2018/09 NULL AFS USD NULL test1 test2 test3 999765670.7 MarOL
2018/10 NULL AFS USD NULL test1 test2 test3 1124704032 MarOL
неверно:
2018-03-01 NULL AFS USD NULL test1 test2 test3 154404189.4 MarOL
2018-04-01 NULL AFS USD NULL test1 test2 test3 299628349.7 MarOL
2018-05-01 NULL AFS USD NULL test1 test2 test3 453738680.6 MarOL
2018-06-01 NULL AFS USD NULL test1 test2 test3 589610947.2 MarOL
2018-07-01 NULL AFS USD NULL test1 test2 test3 735510224.6 MarOL
2018-08-01 NULL AFS USD NULL test1 test2 test3 867543313.9 MarOL
2018-09-01 NULL AFS USD NULL test1 test2 test3 999765670.7 MarOL```