我想使用spark-excel库将数据框导出到Excel文件。我可以运行Spark作业,指定要与参数一起使用的依赖项,但我希望它只使用sbt文件来打包应用程序(我知道它应该是几乎相同的东西)。
在build.sbt中,这一行指定了依赖项,以及一些已经存在的依赖项:
libraryDependencies += "com.crealytics" % "spark-excel_2.11" % "0.12.0"这主要是基于这个页面:Spark Excel Library
下面是用来运行它的命令:
spark-submit --master spark://spark:7077 --class metro_export target/scala-2.11/metrologie_2.11-0.1.jar当使用此方法时,它不起作用。
下面是我如何使用--package运行它。我确保在这两种情况下都是相同的版本(我使用的是Scala 2.11)。
spark-submit --master spark://spark:7077 --packages com.crealytics:spark-excel_2.11:0.12.0 --class metro_export target/scala-2.11/metrologie_2.11-0.1.jar
在scala代码中,有一行用于将数据帧(df)导出到Excel文件:
stats.write.format("com.crealytics.spark.excel")
.option("useHeader", "true")
.option("addColorColumns", "true")
.save("stats.xlsx")我在使用--packages com.crealytics:spark-excel_2.11:0.12.0提交时可以工作,但不能没有,即使在打包jar (使用sbt package)时在sbt中有依赖项也是如此。
相反,这是我得到的错误:
Exception in thread "main" java.lang.ClassNotFoundException: Failed to find data source: com.crealytics.spark.excel. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:635)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:190)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:174)
at metro_export$.main(metro_export.scala:30)
at metro_export.main(metro_export.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:879)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: com.crealytics.spark.excel.DefaultSource
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23$$anonfun$apply$15.apply(DataSource.scala:61
8)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23$$anonfun$apply$15.apply(DataSource.scala:61
8)
at scala.util.Try$.apply(Try.scala:192)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23.apply(DataSource.scala:618)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23.apply(DataSource.scala:618)
at scala.util.Try.orElse(Try.scala:84)
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:618)
... 14 more那么为什么它找不到com.crealytics.spark.excel呢?在sbt中指定依赖项还不够吗?
发布于 2020-03-11 22:23:22
如果有人还在那里,那么问题来自于他的build.sbt中的导入。如果你想在这篇文章的当前最新版本中使用它,如果是这样的话:
libraryDependencies += "com.crealytics" %% "spark-excel_2" % "0.13.1"作者应该使用
libraryDependencies += "com.crealytics" % "spark-excel_2" % "0.12.0"而不是
libraryDependencies += "com.crealytics" % "spark-excel_2.11" % "0.12.0"https://stackoverflow.com/questions/57675434
复制相似问题