繁体   English   中英

在Amazon S3存储桶中创建Avro文件

[英]Creating an Avro file in Amazon S3 bucket

如何在s3存储桶中创建Avro文件,然后将avro记录附加到其中。

我有Byte数组形式的所有avro记录,并成功传输到avro文件中。 但他的文件(我知道)不是一个完整的avro文件。 由于完整的avro文件是架构+数据。

以下是在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();
        }

    }

注释中的代码不起作用。 只是试着玩弄它。 对此有任何帮助。

谢谢。

我相信你的断言是正确的,你不能编码字节数组中的数据和模式。 您需要使用一些容器(通常是文件)对两者进行编码。

通过一些修复,您注释掉的代码应该可以正常工作。 我刚从用Java编写的Lambda中做了类似的事情。 我使用DataFileWriter将文件写入本地磁盘( /tmp ),然后使用您的语法将该文件放入S3而没有问题。

两个建议:

  • 完成写入文件后调用dataFileWriter.close()
  • 直接在s3Client.putObject调用中使用file对象,例如s3Client.putObject(bucket,key,file)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM