我能够将CSV数据转换为ORC格式。但是根据新要求,我的应用程序需要将可以采用任何格式(例如CSV,Avro等)的输入数据序列化为ORC编写器可理解的格式,并将其写入kafka主题。稍后,我的应用程序或其他一些应用程序需要从kafka主题中读取这些数据,并将其写为ORC文件。输入数据作为属性包含在一个对象中,同一对象的ORC模式定义为另一个属性。
最佳答案
如果您已经可以从CSV / Avro / etc来源创建ORC格式,则可以创建较小的ORC文件(每个文件约10MB),然后可以使用自己的序列化方法将其填充到Kafka中,例如使用Google Protocol Buffer :
https://developers.google.com/protocol-buffers/docs/overview
您可以在自己的字段(文件名,路径/目录等)中定义元数据,然后将实际的二进制ORC文件作为简单的字节数组发送。
在Kafka使用者方面,任何使用消息的人都只需要使用protobuf模式对消息进行反序列化,并以正确的文件名,路径等将接收到的字节数组存储为HDFS / S3 / etc文件。此处的一大优势是Protobuf和Kafka不在乎字节数组字段中发送的内容。它可以是纯文本,也可以是ORC,二进制AVRO等。只要您在目标目标存储中正确命名它们,它们就可以工作。
一些警告:
关于java - 在Java中将不同类型的数据序列化为ORC格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615108/