Scala代码不获取s3文件

Scala代码不获取s3文件,scala,amazon-web-services,amazon-s3,Scala,Amazon Web Services,Amazon S3,我正在尝试运行一个EMR任务,Scala代码被假定为获取位于S3存储桶中的文本文件的内容。scala.io.source库把S3路径的正确位置弄乱了 我将参数runidfile指定给EMR作业: --runidfile s3://my-bucket/input.txt scala代码执行以下操作: val runid_path = args("runidfile") val runid = Source.fromFile(runid_path).getLines().mkString 代码不

我正在尝试运行一个EMR任务,Scala代码被假定为获取位于S3存储桶中的文本文件的内容。
scala.io.source
库把S3路径的正确位置弄乱了

我将参数runidfile指定给EMR作业:

--runidfile s3://my-bucket/input.txt
scala代码执行以下操作:

val runid_path = args("runidfile")
val runid = Source.fromFile(runid_path).getLines().mkString
代码不接受S3路径中的“/”,我得到一个错误:

原因:java.io.FileNotFoundException:s3:/my bucket/input.txt(没有这样的文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:146)
位于scala.io.Source$.fromFile(Source.scala:90)
位于scala.io.Source$.fromFile(Source.scala:75)
位于scala.io.Source$.fromFile(Source.scala:53)
在com.move.spothing.userEvents.RecommenderValidator上。(RecommenderValidator.scala:37)


有什么解决方案或解决办法吗?我尝试使用
Source.fromURL
,但S3不是有效的协议,因此它不接受它。

scala.io.Source库不打算直接从Amazon S3访问文件。你需要另一个图书馆

你可以用办公室。下面是一些示例代码(从中复制)


谢谢斯文的回复。我还有一个问题。因为我在我的专业帐户中运行它,所以我没有访问密钥的权限。此外,我正在同一子网中作为EMR作业运行它;所以我认为它应该在没有任何凭证的情况下进入S3领域。如果你不介意的话,我想知道这将如何工作。@RachitRaut我没有使用Amazon EMR的经验,也许文档可以帮助你:或者你可以问另一个问题。只是想补充一下,我遵循了Sven提供的示例代码,可以成功地从S3读取配置文件。我在用电子病历。只要EMR角色有权访问S3 bucket.FYI,在不使用任何凭据的情况下创建AmazonS3Client()时,它就可以工作-此方法删除换行符。您只需调用
myData.mkString
即可保留换行符。您可以查看
val credentials = new BasicAWSCredentials("myKey", "mySecretKey")
val s3Client = new AmazonS3Client(credentials)
val s3Object = s3Client.getObject(new GetObjectRequest("my-bucket", "input.txt"))
val myData = Source.fromInputStream(s3Object.getObjectContent())

val runid = myData.getLines().mkString