首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于依赖问题,无法使用spark-excel导出数据帧

由于依赖问题,无法使用spark-excel导出数据帧
EN

Stack Overflow用户
提问于 2019-08-27 21:09:41
回答 1查看 4.6K关注 0票数 2

我想使用spark-excel库将数据框导出到Excel文件。我可以运行Spark作业,指定要与参数一起使用的依赖项,但我希望它只使用sbt文件来打包应用程序(我知道它应该是几乎相同的东西)。

在build.sbt中,这一行指定了依赖项,以及一些已经存在的依赖项:

代码语言:javascript
复制
libraryDependencies += "com.crealytics" % "spark-excel_2.11" % "0.12.0"

这主要是基于这个页面:Spark Excel Library

下面是用来运行它的命令:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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中有依赖项也是如此。

相反,这是我得到的错误:

代码语言:javascript
复制
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中指定依赖项还不够吗?

EN

回答 1

Stack Overflow用户

发布于 2020-03-11 22:23:22

如果有人还在那里,那么问题来自于他的build.sbt中的导入。如果你想在这篇文章的当前最新版本中使用它,如果是这样的话:

代码语言:javascript
复制
libraryDependencies += "com.crealytics" %% "spark-excel_2" % "0.13.1"

作者应该使用

代码语言:javascript
复制
libraryDependencies += "com.crealytics" % "spark-excel_2" % "0.12.0"

而不是

代码语言:javascript
复制
libraryDependencies += "com.crealytics" % "spark-excel_2.11" % "0.12.0"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57675434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档