首页 > 解决方案 > scala- 从 S3 存储桶读取文件

问题描述

我想从 S3 存储桶中读取特定文件。在我的 S3 存储桶中,我将拥有如此多的对象(目录和子目录)。我想遍历所有对象并且必须只读取该文件。

我正在尝试以下代码:

val s3Client: AmazonS3Client = getS3Client()
    try {
      log.info("Listing objects from S3")
      var counter = 0

      val listObjectsRequest = new ListObjectsRequest()
        .withBucketName(bucketName)
        .withMaxKeys(2)
        .withPrefix("Test/"+"Client_cd" + "/"+"DM1"+"/")
        .withMarker("Test/"+"Client_cd" + "/"+"DM1"+"/")
      var objectListing: ObjectListing = null
      do {
        objectListing = s3Client.listObjects(listObjectsRequest)
        import scala.collection.JavaConversions._
        for (objectSummary <- objectListing.getObjectSummaries) {
          println( objectSummary.getKey + "\t" + StringUtils.fromDate(objectSummary.getLastModified))

        }
          listObjectsRequest.setMarker(objectListing.getNextMarker())
        }
        while (objectListing.isTruncated())

    }
    catch {
      case e: Exception => {
        log.error("Failed listing files. ", e)
        throw e
      }
    }

在此路径中,我必须仅读取最新月份文件夹中的 .gz 文件。文件路径:

"Mybucket/Test/Client_cd/Dm1/20181010_xxxxx/*.gz"

在这里,我必须将 Client_cd 作为特定客户端的参数传递。

如何过滤对象并获取特定文件?

在此处输入图像描述

标签: scalaamazon-web-servicesamazon-s3apache-spark-sql

解决方案


如果您使用的是 EMR 或您的 S3 配置设置正确,您也可以使用sc.textFile("s3://bucket/Test/Client_cd/Dm1/20181010_xxxxx/*.gz")


推荐阅读