使用Spark Java Excel从excel文件加载数据

时间:2018-05-02 17:40:51

标签: java excel apache-spark hadoop hdfs

我想使用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)

2 个答案:

答案 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项目中使用这个包。