我想使用Spark Session 2.2从HDFS中的Excel文件加载数据。下面是我的Java代码和我得到的例外。
Dataset<Row> df =
session.read().
format("com.crealytics.spark.excel").
option("location", pathFile).
option("sheetName", "Feuil1").
option("useHeader", "true").
option("treatEmptyValuesAsNulls", "true").
option("inferSchema", "true").
option("addColorColumns", "false").
load(pathFile);
我遇到了这个例外:
java.lang.NoSuchMethodError:org.apache.poi.ss.usermodel.Workbook.close()V 在com.crealytics.spark.excel.ExcelRelation.com $ crealytics $ spark $ excel $ ExcelRelation $$ getExcerpt(ExcelRelation.scala:81) 在com.crealytics.spark.excel.ExcelRelation $$ anonfun $ inferSchema $ 1.apply(ExcelRelation.scala:270) 在com.crealytics.spark.excel.ExcelRelation $$ anonfun $ inferSchema $ 1.apply(ExcelRelation.scala:269) 在scala.Option.getOrElse(Option.scala:121) 在com.crealytics.spark.excel.ExcelRelation.inferSchema(ExcelRelation.scala:269) 在com.crealytics.spark.excel.ExcelRelation。(ExcelRelation.scala:97) 在com.crealytics.spark.excel.DefaultSource.createRelation(DefaultSource.scala:35) 在com.crealytics.spark.excel.DefaultSource.createRelation(DefaultSource.scala:14) 在com.crealytics.spark.excel.DefaultSource.createRelation(DefaultSource.scala:8) 在org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330) 在org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
答案 0 :(得分:0)
它看起来像一个依赖问题。检查你的pom / sbt中是否有一些库没有使用不同版本的Apache POI。例如,您可以使用mvn depenency:tree(https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html)或相应的SBT / Gradle ...命令。
当您发现冲突的依赖项(缺少Workbook.close()方法的依赖项时),您可以将其从导入中排除。
显然,此处添加了close()
方法:https://github.com/apache/poi/commit/47a8f6cf486b974f31ffd694716f424114e647d5
答案 1 :(得分:0)
问题是:对于spark-excel,它只支持scala。
所以如果你想使用这个依赖,你可以把你的scala代码编译成.jar包,然后在你的java项目中使用这个包。