当我将它发送到Spark Streaming时如何保持JSON结构

时间:2016-03-15 17:45:29

标签: java json apache-spark streaming

我通过Java中的命令收到一个JSON输入,它在Spark Streaming上有几行和属性:

JavaReceiverInputDStream <String> 
lines = ssc.socketTextStream 
(localhost, port)

我现在想要过滤行流,这样它在每一行中只有两个特定属性,并转储其余行。

这里的问题是我发现线条没有保留JSON结构,也就是说,我不能只做

JavaDstream<String> line=lines[1];
line.print() ;

我的问题是,如何让我的JavaDStream保持JSON对象的结构,然后打印出我想要的行?

我希望我很清楚,谢谢你。

1 个答案:

答案 0 :(得分:2)

曼努埃尔,

所以基本上你的问题是如何确保整个JSON有效负载是RDD中的单个记录,或者当你在套接字上发送消息时记录边界是什么。

所以基本上你使用的socketTextStream读取socket上的消息,如果它找到一个新的行字符,它将使用它作为记录边界。用于侦听套接字,读取消息并将其传递给Spark的实际代码是SocketReceiver.bytesToLines()方法的一部分,如果你查看注释,这就是它所说的

/**
 * This methods translates the data from an inputstream (say, from a socket)
 * to '\n' delimited strings and returns an iterator to access the strings.
*/ 

因此,请务必从JSON消息中取出\ n字符,将您的发送火花作为单个记录

苏尼