如何在不使用Spark的情况下从AWS EMR内部读取S3存储桶中的文本文件

我需要从EMR群集中打开一个位于S3存储桶中的常规文本文件(而不是镶木地板或CSV文件)。我可以直接使用spark.read.parquet("s3://mybucket/some_parq_file")

打开CSV或镶木地板文件

但是我需要使用 java.io.File或scala.io.Source 从EMR集群中读取常规文本文件。尝试时获取java.io.FileNotFoundException

import scala.io.Source
val hdr = "s3://mybucket/txtfile.txt"
for (line <- Source.fromFile(hdr).getLines) {
    println(line)
}
bigworm01 回答:如何在不使用Spark的情况下从AWS EMR内部读取S3存储桶中的文本文件

    当EMR出现并启动时,
  1. u可以给出启动脚本 脚本(.sh文件)可以访问s3文件(我已经使用过多次)
  2. 您可以提交EMR步骤,该步骤执行一个jar文件,并且该jar可以访问s3
,

我想大多数AWS设置已经使用默认凭证链和默认区域提供商链在您的EMR集群中配置了凭证。这也应适用于AWS Lambda。因此,要从EMR群集访问我的S3存储桶,我只需要使用AWSS3ClientBuilder

import com.amazonaws.services.s3.AmazonS3ClientBuilder
import java.io.File
import java.nio.file.{Files,StandardCopyOption}

val bucket ="s3_bucket"
val file_in_s3 = "somefile.txt"
val dest = "/tmp/local_file.txt"
val s3 = AmazonS3ClientBuilder.defaultClient()
val stream = s3.getObject(bucket,file_in_s3).getObjectContent

Files.copy(stream,new File(dest).toPath,StandardCopyOption.REPLACE_EXISTING)
本文链接:https://www.f2er.com/3099988.html

大家都在问