Почему при загрузке файла Cobol Copybook возникает ошибка "ClassNotFoundException: java.time.temporal.TemporalAccessor"?
У меня есть следующая программа spark, которую я пытаюсь запустить, целью которой является преобразование файла copybok в файл Parquet.(Ссылка на программу Cobrix https://github.com/AbsaOSS/cobrix). файл с именем CobolCopybookExample1.scala (this is inside cobrix-master\cobrix-master\spark-cobol\src\main\scala\za\co\absa\cobrix\spark\cobol\examples)
Исходный файл находится в (cobrix-master\cobrix-master\examples\example_data)
Мы знаем, что Spark не предоставляет встроенную библиотеку для преобразования данных в тетрадь. Для этого есть библиотека с открытым исходным кодом, называемая Cobrix, которая сертифицирована Apache Spark Foundation, это то, что я использую в своей программе.
Следующие шаги, которые я выполнил до сих пор и попали в ошибку.
Мне нужно 4 обязательных файлов JAR они
spark-cobol-0.3.0.jar
cobol-parser-0.3.0.jar
scodec-core_2.11-1.10.3.jar
scodec-bits_2.11-1.1.4.jar
1). Я скачал эти банки и сохранил их в своей папке VM Desktop Cobol
2). Я запустил spark-shell следующей командой из локации jar. Он успешно запущен.
spark-shell --master yarn --deploy-mode client --driver-cores 4 --driver-memory 4G --jars spark-cobol-0.3.0.jar,cobol-parser-0.3.0.jar,scodec-core_2.11-1.10.3.jar,scodec-bits_2.11-1.1.4.jar
3) Теперь мне нужно было импортировать 2 библиотеки, прежде чем я смог запустить функцию Spark Reader. Так я и сделал
import org.apache.spark.sql.{SaveMode, SparkSession}
import za.co.absa.cobrix.spark.cobol.utils.SparkUtils
4) Теперь мне нужно было запустить спарк DF и получить ошибки, о которых я упоминал в этом письме. Это кажется мне экологической ошибкой, но я бы хотел посоветоваться с вами. Я изо всех сил пытаюсь решить их.
val df = spark.read
.format("za.co.absa.cobrix.spark.cobol.source")
.option("copybook", "file:///home/bigdata/Desktop/Cobol/example_data/raw_file.cob")
.load("file:///home/bigdata/Desktop/Cobol/example_data/raw_data")
после этого я получаю эту ошибку
java.lang.NoClassDefFoundError: java/time/temporal/TemporalAccessor
at za.co.absa.cobrix.spark.cobol.reader.fixedlen.FixedLenNestedReader.loadCopyBook(FixedLenNestedReader.scala:76)
at za.co.absa.cobrix.spark.cobol.reader.fixedlen.FixedLenNestedReader.<init>(FixedLenNestedReader.scala:42)
at za.co.absa.cobrix.spark.cobol.source.DefaultSource.createFixedLengthReader(DefaultSource.scala:83)
at za.co.absa.cobrix.spark.cobol.source.DefaultSource.buildEitherReader(DefaultSource.scala:70)
at za.co.absa.cobrix.spark.cobol.source.DefaultSource.createRelation(DefaultSource.scala:54)
at za.co.absa.cobrix.spark.cobol.source.DefaultSource.createRelation(DefaultSource.scala:45)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:135)
... 50 elided
Caused by: java.lang.ClassNotFoundException: java.time.temporal.TemporalAccessor
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 59 more
Я также прилагаю свою программу Scala
2 ответа
Не могли бы вы попытаться перестроить свой проект Scala с помощью SBT или Maven, вот интересная статья. Вам нужен жирный банку (с этим вам не понадобится --jars
в spark submit
). Ошибка, по-видимому, связана с тем, что один из JARS имеет зависимости от другого JARS. Например, проверьте, что для правильной работы Cobol Parser нужны некоторые зависимости Compile.
Кажется , что некоторые зависимости отсутствуют или искры отправляются, не включая файлы jar, которые вы передаете через --jars.
Можете ли вы попробовать после перемещения этих банок в spark lib