Protobuf结合Spark Structured Streaming使用

本文讲述了在Spark Structured Streaming处理protobuf格式数据时遇到的问题及解决方案。首先介绍了项目背景,即使用protobuf存储流式数据,通过Spark Structured Streaming进行处理。然后详细描述了从准备protobuf编译环境,编译.proto文件生成Java类,到添加正确的Maven依赖,并解决不同protobuf版本之间的兼容性问题的过程。最后提到了Spark代码中如何成功调用protobuf反序列化方法。
摘要由CSDN通过智能技术生成

背景

    在项目开发中对流式数据使用Spark Structured Streaming进行处理,处理流程为:消息中间件(source) -> Spark Structured Streaming(work) -> AFS(sink)。
    在source->work这个过程中,消息以protobuf形式存储,其中 Spark Structured Streaming接受到的数据格式为Array[Byte],所以我们需要将Array[Byte]形式的数据通过protobuf反序列化出来,得到最终完整的String。
    PS:一开始比较懒,直接使用new String(Array[Byte])的方式企图将数据粗暴的转成String,最后果然只能看到其中一部分数据,剩下的另外很大一部分数据全都是乱码,或者直接是空格,导致我拿不到我想要的字段内容,所以最后还是老老实实使用protobuf进行反序列化。
头秃

心酸历程

    废话少说,过程如下:

需准备的东西

  • 一个可以拿到protoBuf格式数据的消息中间件;
  • Spark Structured Streaming运行环境,我是用的是Hadoop环境;
  • 消息中间件中protobuf数据对应的.proto文件;
  • 本地可以执行protoc命令的protobuf编译器;

protobuf及本地环境相关准备

    protobuf相关知识、proto语法等proto相关基础知识见proto官网:https://developers.google.cn/protocol-buffers/ 或者可以自己去搜一搜一些别人的博客之类的。
    我的test.proto文件如下:

syntax = "proto2";

//语言种类枚举,后续可持续补充
enum LanguageTypes {
   
	CH = 0;	//中文
	ENGLISH = 1;	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值