我有一些。S3上bucket中的zip文件。我需要解压并将其保存回bucket中,无需本地文件系统。
我知道S3是静态存储,但我可以通过给S3提供路径来解压S3本身上的文件。
我有以下问题。
>
我可以通过桶/文件夹的路径到FileOutputStream(桶路径)
,所以它解压文件直接在那里。
BufferedOutputStream=new BufferedOutputStream(new FileOutputStream(filePath));
S3Object。putObject()
也接受inputstream作为参数,我可以直接将ZipEntry转换为inputstream并将其作为带有元数据的参数传递。
我需要使用EMR来执行所有操作(本地文件系统不会出现在图片中)。我可以从s3读取zip文件并使用EMR解压文件并将其保存在s3上吗。
这是我的密码。
S3Object s3object = s3Client.getObject(new GetObjectRequest(bucketName,objName)); //sandip.zip
ZipInputStream in = new ZipInputStream(s3object.getObjectContent());
ZipEntry entry=in.getNextEntry(); // sandip_1.graphml
try {
while ((entry!= null)){
s3Client.putObject(bucketName, entry.getName(), new File(entry.getName()));
}
}
catch (IOException e) {
e.printStackTrace();
}
我当前的代码引发以下异常。
Exception in thread "main" com.amazonaws.AmazonClientException: Unable to calculate MD5 hash: sandip_1.graphml (The system cannot find the file specified)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1319)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1273)
at com.example.testaws.test2.createAdjListZipFiles(Unknown Source)
at com.example.testaws.test1.main(test1.java:33)
Caused by: java.io.FileNotFoundException: sandip_1.graphml (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.amazonaws.util.Md5Utils.computeMD5Hash(Md5Utils.java:97)
at com.amazonaws.util.Md5Utils.md5AsBase64(Md5Utils.java:104)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1316)
... 3 more
请给我提示或参考。
首先,有一件事你是对的。S3是静态存储,因此不能直接在S3上进行任何文件级更改。你必须下载文件,根据需要进行转换,然后上传回来。
其次,您完全可以使用EMR来实现这一点。事实上,这会让你的生活变得很轻松。试试这个:
>
创建安装了Hive的EMR集群。
创建一个类似这样的配置单元表:创建外部表x{record string}位置's3://blah';
创建另一个名为y的表,如上所述,添加一个选项:“存储为textfile”
现在执行“插入覆盖表y从x选择记录”。
在这里,Hive将自动检测输入文件是否被gzip。之后,您所做的就是指示Hive将相同的数据存储在相同的S3位置,但作为文本文件。
另外,我无法发布准确的代码或正确的格式,因为我正在忙着回答这个问题。但我希望你能了解大概情况。这肯定会起作用,因为我已经做过几次了。
问题内容: 我在Amazon s3存储桶中有一堆文件,我想压缩这些文件并使用Java Spring通过S3 URL下载获取内容。 问题答案: S3不是文件服务器,也不提供操作系统文件服务,例如数据处理。 如果有很多“巨大”文件,那么最好的选择是 启动一个简单的EC2实例 将所有这些文件下载到EC2实例,进行压缩,然后使用新的对象名称将其重新上传回S3存储桶 是的,您可以使用AWS lambda执行
问题内容: 我正在编写一个应用程序,该应用程序从url下载图像,然后使用aws-sdk将其上传到S3存储桶。 以前,我只是下载图像并将其保存到磁盘中,就像这样。 然后像这样将图像上传到AWS S3 但是我想跳过将图像保存到磁盘的部分。有什么办法可以让我对一个变量进行响应,然后将其上传? 问题答案: 这是一些可以很好地做到这一点的javascript:
我正在编写一个应用程序,它从url下载图像,然后使用AWS-SDK将其上传到S3桶中。 以前,我只是下载图像并将它们保存到磁盘上,就像这样。 然后像这样将图像上传到AWS S3 但我想跳过将映像保存到磁盘的部分。有什么方法可以响应从到一个变量,然后上传它吗?
我想将spark dataframe的内容保存到s3 bucket中的csv文件中: 它创建名为:part-00000-fc644e84-7579-48的文件的问题。 有没有办法修复这个文件的名字。例如test.csv? 谢谢 最佳
问题内容: 我正在尝试使用适用于AWS的新boto3客户端做一个“ hello world” 。 我的用例非常简单:从S3获取对象并将其保存到文件中。 在boto 2.XI中,它应该是这样的: 在boto 3中。我找不到一种干净的方法来做同样的事情,所以我手动遍历了“ Streaming”对象: 要么 而且效果很好。我想知道是否有任何“本机” boto3函数可以完成相同的任务? 问题答案: Bot
我正在尝试为AWS的新boto3客户端做一个“hello world”。 我的用例相当简单:从S3获取对象并将其保存到文件中。 在boto 2.X中,我会这样做: 在博托3。我找不到一种干净的方法来做同样的事情,所以我手动迭代“流”对象: 或 而且效果很好。我想知道是否有任何“本机”boto3函数可以完成相同的任务?