大家好。我在测试使用E-mapreduce中的spark streaming来采集Loghub的数据时,遇到点问题。
我用Loghub监控一个文本文件,采用的是极简模式。该文本文件,每隔三秒生成一个1到10的随机数,如下图所示。
我修改了EMR集群提供的Loghubsample.scala去采集,batch interval设置为1秒,代码如下所示。
loghubStream.foreachRDD { rdd =>
val num = rdd.count()
println("this round received: " + num + " data lines.")
if (num > 0){
rdd.foreach { x:Array[Byte] =>
for (y <- x){
println("result is "+ y)
}
}
}
}
但是现在每次打印出的并不是我想要的1到10的随机数,而是一串数字。请问这是因为我的调用方法不对吗?能否给我些帮助,感谢大家。
后来咨询了工单的技术人员,得到了提示:先取出来rdd是一个byte对象,把它转成string,这个string是一个json对象,因为日志服务的数据是json格式的。然后用json的工具类转一下,最后取里面的key就能拿到value了。
终于解决了问题。
非常感谢帮助。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。