Произошла ошибка при вызове o82.relationalize: scala.MatchError: choice (класса com.amazonaws.services.glue.schema.TypeCode) - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь загрузить XML-файлы из соединения S3 в задании AWS Glue ETL.Файлы загружаются «правильно», поскольку при создании DynamicFrame из файлов в S3 задание не завершается сбоем.Ошибка возникает при вызове реляционного.Вот обратная трассировка.

Traceback (most recent call last):
File "script_2019-05-01-15-21-13.py", line 83, in <module>
dfc = Relationalize.apply(frame=df_without_null, name=dfc_root_table_name, transformation_ctx='dfc')
File "/mnt/yarn/usercache/root/appcache/application_1556723707401_0001/container_1556723707401_0001_01_000001/PyGlue.zip/awsglue/transforms/transform.py", line 24, in apply
File "/mnt/yarn/usercache/root/appcache/application_1556723707401_0001/container_1556723707401_0001_01_000001/PyGlue.zip/awsglue/transforms/relationalize.py", line 47, in __call__
File "/mnt/yarn/usercache/root/appcache/application_1556723707401_0001/container_1556723707401_0001_01_000001/PyGlue.zip/awsglue/dynamicframe.py", line 336, in relationalize
File "/mnt/yarn/usercache/root/appcache/application_1556723707401_0001/container_1556723707401_0001_01_000001/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
File "/mnt/yarn/usercache/root/appcache/application_1556723707401_0001/container_1556723707401_0001_01_000001/pyspark.zip/pyspark/sql/utils.py", line 63, in deco
File "/mnt/yarn/usercache/root/appcache/application_1556723707401_0001/container_1556723707401_0001_01_000001/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o82.relationalize.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 239 in stage 3.0 failed 4 times, most recent failure: Lost task 239.3 in stage 3.0 (TID 889, ip-172-32-47-183.ec2.internal, executor 57): scala.MatchError: choice (of class com.amazonaws.services.glue.schema.TypeCode)
at com.amazonaws.services.glue.transforms.Relationalize$$anonfun$traverseCollection$1.apply(Relationalize.scala:629)
at com.amazonaws.services.glue.transforms.Relationalize$$anonfun$traverseCollection$1.apply(Relationalize.scala:623)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)

Когда я загружаю файлы в DynamicFrame, я использую вызов create_dynamic_frame_from_options с опцией форматирования, установленной на xml.Вот дополнительные параметры подключения и формата, которые я использовал в этом вызове.

Формат:

'rowTag': 'CandidateAdministrationDataRecord'

Соединение:

'paths': path_keys, 'groupFiles': 'inPartition'

path_keys - это списокпути в моем ведре, которые я импортирую.Я отфильтровываю все файлы, которые не являются XML и не содержат данных, которые меня интересуют.

Мое лучшее предположение из всех исследований, которые я провел по этой проблеме, заключается в том, что есть некоторыенесоответствующая структура элементов XML глубоко в одном из файлов.Я видел рекомендации по добавлению следующего в мои параметры формата:

'treatEmptyValuesAsNulls': 'true'

Но я не хочу просто продолжать пытаться и нести расходы, если это не правильный способ решить эту проблему.Пожалуйста, дайте мне знать, если это возможное решение или я что-то упускаю полностью.Спасибо

ОБНОВЛЕНИЕ

Я пытался использовать

treatEmptyValuesAsNulls': True

, но безуспешно.Работа все еще не удалась.Я не уверен, почему это

ОБНОВЛЕНИЕ 2

Так что это было исключение OOM.Я исправил это, загрузив файлы с набором параметров groupSize.Я выбрал значение, играя со значением, и обнаружил, что 50 МБ работают на меня.Вот документация к этому.

Я столкнулся с другой проблемой, однако с пользовательской функцией (UDF) и другим OOM.Я работаю над решением этой проблемы, но ссылка, которая обсуждает эту проблему, здесь

ОБНОВЛЕНИЕ 3

Я решил нетдольше используйте UDF и попробуйте запустить задание со всеми функциональными возможностями.Я пытаюсь переименовать некоторые поля в нижний регистр и удалить «.».Я использую кадры данных для этого вместо Glue DynamicFrame из-за известной проблемы в полях переименования.Я получаю сообщение об ошибке OOM при попытке вызвать dataframe.columns и работаю над исправлением этого

...