0

我想使用 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 at 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:27​​0) 在 com.crealytics.spark.excel.ExcelRelation$$anonfun$inferSchema$1.apply(ExcelRelation.scala: 269) 在 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) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)

4

2 回答 2

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/摇篮...命令。

当您发现冲突的依赖项(缺少 Workbook.close() 方法的依赖项)时,您可以将其从导入中排除。

显然close()这里添加了方法:https ://github.com/apache/poi/commit/47a8f6cf486b974f31ffd694716f424114e647d5

于 2018-05-02T17:55:55.907 回答
0

问题是:对于 spark-excel,它只支持 scala。
所以如果你想使用这个依赖,你可以将你的scala代码编译成.jar包,然后在你的java项目中使用这个包。

于 2021-07-08T06:31:04.463 回答