Я давно гоняюсь за этой проблемой, и у меня нет вариантов, которые я знаю. Я загружаю паркетный файл, в котором есть такие строки:
RFS,FOI,1209591006000,64.0000,1209591007000,Y,1209591007000,04/30/2008 17:30:07,1209591007000,UPDATER
Бесполезно то, что spark выдаёт ошибку, сообщающую мне, что точность для DecimalType больше 38 (это предел). Вот соответствующая трассировка стека:
19/07/09 20:24:02 WARN TaskSetManager: Lost task 0.0 in stage 4.0 (TID 203, ip-10-230-246-236.ec2.internal, executor 1): org.apache.spark.sql.AnalysisException: DecimalType can only support precision up to 38;
at org.apache.spark.sql.types.DecimalType.<init>(DecimalType.scala:52)
Вопросы:
1) Я не понимаю, какой столбец может вызывать искру, ни один из них не кажется даже отдаленно близким к пределам точности
2) Как я могу получить искру, чтобы сказать мне более конкретно, для какой колонки она не подходит (или, еще лучше, для какой строки?)?
3) Я не могу напечатать схему в spark, потому что я даже не могу прочитать в файле (хранящемся в S3) из-за этого исключения, поэтому я не уверен, как проверить правильность схемы.
4) Это неверная схема в файле паркета? Или это проблема с данными?
Информация:
- Spark работает как склеенная работа (без сервера), но я считаю, что на последней версии.
- файл паркета генерируется HVR и имеет версию v3 паркета без сжатия.
Я немного погуглил, и люди говорят, что вы должны вручную указать схему для управления ею, но я не могу в этом случае, потому что это большой процесс ETL, где мы не всегда собираемся знать схему (мы полагаемся, что на встроенную схему в паркетные файлы и искры способности чтения).