abh*_*800 5 java file amazon-s3 amazon-web-services avro
如何在 s3 存储桶中创建 Avro 文件,然后将 avro 记录附加到其中。
我拥有字节数组形式的所有 avro 记录,并已成功传输到 avro 文件中。但他的文件(据我所知)不是完整的 avro 文件。由于完整的 avro 文件是 schema + data。
以下是在 S3 中传输文件中的字节记录的代码。
任何人都知道如何创建基于 avro 模式的文件,然后将这些字节传输到同一个文件。
public void sendByteData(byte [] b, Schema schema){
try{
AWSCredentials credentials = new BasicAWSCredentials("XXXXX", "XXXXXX");
AmazonS3 s3Client = new AmazonS3Client(credentials);
//createFolder("encounterdatasample", "avrofiles", s3Client);
ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(b.length);
InputStream stream = new ByteArrayInputStream(b);
/* File file = new File("/home/abhishek/sample.avro");
DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(writer);
dataFileWriter.create(schema, file);
s3Client.putObject("encounterdatasample", dataFileWriter.create(schema, file), stream, meta);
*/
s3Client.putObject("encounterdatasample", "sample.avro", stream,meta);
System.out.println("Done writing the data");
}catch(Exception e){
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
注释中的代码不起作用。只是想玩玩它。对此有任何帮助。
谢谢。
我相信您的断言是正确的,您无法在字节数组中对数据和模式进行编码。您需要使用一些容器(通常是文件)来对两者进行编码。
通过一些修复,您注释掉的代码应该可以工作。我刚刚在用 Java 编写的 Lambda 中做了类似的事情。我使用 将该文件写入本地磁盘 ( /tmp) DataFileWriter,然后使用您的语法将该文件放入 S3,没有问题。
两个建议:
dataFileWriter.close()完成写入文件后调用。file直接在调用中使用该对象s3Client.putObject,例如s3Client.putObject(bucket,key,file)| 归档时间: |
|
| 查看次数: |
3695 次 |
| 最近记录: |