Я выполнил задание на искру, которое получает данные из двух источников, например: / home / hadoop / base / hourly / {input1 / 20190701 /, input2 / 20190701 /}
Проблема состоит в том, что эти дваструктуры имеют разные схемы.Ситуация, с которой я столкнулся, заключается в том, что окончательное состояние задания «Спарк» успешно, но эти данные не обрабатываются из-за проблемы.Из-за успешного статуса эта проблема некоторое время оставалась незамеченной в наших кластерах.Есть ли способ, с помощью которого мы можем попросить спарк задание завершиться с ошибкой, вместо того, чтобы успешно завершиться.
Вот фрагмент ошибки в журнале задач для справки
Job aborted due to stage failure: Task 1429 in stage 2.0 failed 4 times, most recent failure: Lost task 1429.3 in stage 2.0 (TID 1120, 1.mx.if.aaa.com, executor 64): java.lang.UnsupportedOperationException: parquet.column.values.dictionary.PlainValuesDictionary$PlainIntegerDictionary
at parquet.column.Dictionary.decodeToLong(Dictionary.java:52)
at org.apache.spark.sql.execution.datasources.parquet.ParquetDictionary.decodeToLong(ParquetDictionary.java:36)
at org.apache.spark.sql.execution.vectorized.OnHeapColumnVector.getLong(OnHeapColumnVector.java:364)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$13$$anon$1.hasNext(WholeStageCodegenExec.scala:636)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:439)
Пример кода Iпобежал:
val ckall = spark.read.parquet("/home/hadoop/base/hourly/{input1/20190701/,input2/20190701/")
ckall.write.parquet("/home/hadoop/output")
В идеале, я ожидаю, что окончательный статус задания спарка будет неудачным