S3路径由Spark Excel Reader错误打印



我正在尝试读取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

但是,为什么在Spark阅读时会缺少斜线?这是错误消息:

 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)

S3A URL以某种方式降低到java.io.FileInputStream.open(),它仅与本地文件系统文件(而不是HDFS,S3等(一起使用。您将需要跟踪com.crealytics.spark.excel内部发生的情况。欢迎使用使用IDE来确定哪些第三方库的话::)(Intellij Idea擅长于此,因为它可以从粘贴的堆栈跟踪到特定的源代码(

(

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

另外,您可以使用Hadoopoffice库来读取/编写Excel文件。它支持Spark DataSources,但也是Hadoop本地的,因此您的S3 URL可能会开箱即用。

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

最新更新