如何在 java 中使用 spark 从 AWS S3 读取 .xls 文件?并且无法读取 sheetName

Posted

技术标签:

【中文标题】如何在 java 中使用 spark 从 AWS S3 读取 .xls 文件?并且无法读取 sheetName【英文标题】:How to read an .xls file from AWS S3 using spark in java? And unable to read sheetName 【发布时间】:2019-05-22 07:43:28 【问题描述】:

我正在尝试从 AWS S3 读取 .xls 文件,但收到 java.io.FileNotFoundException 异常。

我尝试了以下两种方法。一种方法是在 option() 中提供带有关键位置的路径,另一种方法是在 load() 中添加相同的路径。

Dataset<Row> segmentConfigData = spark.read()
                .format("com.crealytics.spark.excel")
                .option("sheetName", "sheet1")
                .option("header","true")
                .option("location","s3a://input/552SegmentConfig.xls")
                .option("useHeader", "true")
                .option("treatEmptyValuesAsNulls", "true")
                .option("inferSchema", "true")
                .option("addColorColumns", "False")
                .load();

Dataset<Row> segmentConfigData = spark.read()
                .format("com.crealytics.spark.excel")
                .option("sheetName", "sheet1")
                .option("header","true")
                .option("location","s3a://input/552SegmentConfig.xls")
                .option("useHeader", "true")
                .option("treatEmptyValuesAsNulls", "true")
                .option("inferSchema", "true")
                .option("addColorColumns", "False")
                .load("s3a://input/552SegmentConfig.xls");

我得到文件未找到异常。同样,当我读取 .csv 文件时,我能够读取该文件。

编辑-我已经解决了这个问题。我使用的是旧版本的“com.crealytics.spark.excel”。一旦我取消了罐子的等级,我就可以准备好了。

但现在我面临另一个问题。除了第一张纸之外,我无法阅读任何其他纸。有什么帮助吗?

【问题讨论】:

【参考方案1】:

我已经解决了这个问题。我使用的是旧版本的“com.crealytics.spark.excel”。一旦我取消了罐子的等级,我就可以准备好了。

此外,我刚刚能够读取 (.xls) 文件的第一页。下面是代码sn-p:

spark.read()
    .format("com.crealytics.spark.excel")
    .option("location",path)
    .option("sheetName", sheetName)
    .option("dataAddress", "'"+sheetName+"'!A1")
    .option("header","true")
    .option("useHeader", "true")
    .option("treatEmptyValuesAsNulls", "true")
    .option("inferSchema", "true")
    .option("addColorColumns", "False")
    .load(path);

【讨论】:

以上是关于如何在 java 中使用 spark 从 AWS S3 读取 .xls 文件?并且无法读取 sheetName的主要内容,如果未能解决你的问题,请参考以下文章

如何从本地安装的 spark 连接到 aws-redshift?

如何克服 AWS Glue 作业中的 Spark“设备上没有剩余空间”错误

如何在 AWS Elastic Beanstalk 上安装/运行 Spark Java 框架?

如何从 Apache Spark 访问 s3a:// 文件?

如何在 AWS Glue 中使用 Spark 包?

在 AWS EMR 上使用 Spark 访问关系数据库