spark excel阅读器错误地打印了s3路径

时间:2017-06-08 06:57:51

标签: excel scala apache-spark

我正在尝试从Amazon S3读取excel表,这是代码片段。但它没有说文件不存在虽然它存在,我检查路径中缺少斜杠(/)。

println(path)
    val data = sqlContext.read.
    format("com.crealytics.spark.excel").
    option("location", s3path).
    option("useHeader", "true").
    option("treatEmptyValuesAsNulls", "true").
    option("inferSchema","true").
    option("addColorColumns", "true").
    load(path)

路径正确打印为: S3A:// AKIAJDDDDDDACNA:A6voquDDDDDqNOUsONDy@my-test/test.xlsx

但是为什么火花读取时会丢失斜线?以下是错误消息:

 Name: java.io.FileNotFoundException
    Message: s3a:/AKIAJYDDDDDDNA:A6DDDDDDDDDwqxkRqUQyXqqNOUsONDy@my-test/test.xlsx (No such file or directory)
    StackTrace:   at java.io.FileInputStream.open0(Native Method)
      at java.io.FileInputStream.open(FileInputStream.java:212)
      at java.io.FileInputStream.<init>(FileInputStream.java:152)
      at java.io.FileInputStream.<init>(FileInputStream.java:104)
      at com.crealytics.spark.excel.ExcelRelation.<init>(ExcelRelation.scala:28)
      at com.crealytics.spark.excel.DefaultSource.createRelation(DefaultSource.scala:31)
      at com.crealytics.spark.excel.DefaultSource.createRelation(DefaultSource.scala:7)
      at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:345)
      at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
      at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:122)
      at $anonfun$1.apply(<console>:46)
      at $anonfun$1.apply(<console>:46)
      at time(<console>:36)

2 个答案:

答案 0 :(得分:0)

不知何故,s3a URL正在降低到java.io.FileInputStream.open(),这只适用于本地文件系统文件,而不适用于HDFS,S3等。您需要追踪com.crealytics.spark.excel内部发生的情况。欢迎使用IDE来解决第三方库的问题:)(IntelliJ IDEA非常擅长BTW,因为它可以从粘贴的堆栈跟踪转到特定的源代码)

另外:不要将您的秘密存放在您的网址中,这是危险的&amp;出于安全原因,将来可能会被禁用的东西。在spark.hadoop.fs.s3a.access.key中设置spark.hadoop.fs.s3a.secret.keyspark-defaults.conf

答案 1 :(得分:0)

或者,您可以使用HadoopOffice库来读取/写入Excel文件。它支持Spark数据源,但也是Hadoop原生的,所以你的s3 URL可能会开箱即用。

https://github.com/ZuInnoTe/hadoopoffice/wiki