我需要从EMR群集中打开一个位于S3存储桶中的常规文本文件(而不是镶木地板或CSV文件)。我可以直接使用spark.read.parquet("s3://mybucket/some_parq_file")
但是我需要使用 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)
}
答案 0 :(得分:0)
答案 1 :(得分:0)
我想大多数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)