У меня ниже XML, который я пытаюсь прочитать через SPARK XML:
<revolt>
<revolt_configuration>
<id>102</id>
<noncontroversial>
<validation_method>SPARK</validation_method>
<validation-timeout>5</validation-timeout>
</noncontroversial>
</revolt_configuration>
</revolt>
Пожалуйста, обратите внимание на поле 'validation-timeout' под неоспоримыми
Я использую код ниже, чтобы прочитатьXML:
df = spark.read.format('com.databricks.spark.xml').option('rowTag','revolt_configuration').load('data')
и печать схемы, которую я получаю ниже выходного корня
|-- id: long (nullable = true)
|-- testvalidationcontroller: struct (nullable = true)
| |-- validation-timeout: long (nullable = true)
| |-- validation_method: string (nullable = true)
При попытке сохранить этот фрейм данных в таблицу кустов я получаю исключение ниже
Caused by: java.lang.IllegalArgumentException: Error: : expected at the position 24 of 'bigint:struct<validation-timeout:bigint,validation_method:string>' but '-' is found.
at org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils$TypeInfoParser.expect(TypeInfoUtils.java:360)
at org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils$TypeInfoParser.expect(TypeInfoUtils.java:331)
at org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils$TypeInfoParser.parseType(TypeInfoUtils.java:483)
at org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils$TypeInfoParser.parseTypeInfos(TypeInfoUtils.java:305)
at org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils.getTypeInfosFromTypeString(TypeInfoUtils.java:765)
at org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe.initialize(ParquetHiveSerDe.java:111)
at org.apache.hadoop.hive.serde2.AbstractSerDe.initialize(AbstractSerDe.java:53)
at org.apache.hadoop.hive.serde2.SerDeUtils.initializeSerDe(SerDeUtils.java:521)
at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:391)
at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:276)
at org.apache.hadoop.hive.ql.metadata.Table.checkValidity(Table.java:197)
at org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:699)
... 44 more
Обратите внимание, что эта проблема не связана с XML, поскольку я столкнулся с аналогичной проблемой при чтении данных на основе JSON
Если поле struct не содержит никаких специальных символов, тогда операция сохранения как таблицы работает правильно.