我想将数据流从VM发送到主机,我使用方法writeToSocket()
,如下所示:
joinedStreamEventDataStream.writeToSocket("192.168.1.10", 6998) ;
此处joinedStreamEventDataStream
的类型为DataStream<Integer,Integer>
。
有人可以告诉我如何将序列化器传递给上述方法。
先谢谢
答案 0 :(得分:3)
这取决于你想如何从套接字读取数据。如果您希望它是数据的字符串表示形式,那么您可以通过以下方式完成:
joinedStreamEventDataStream.map(new MapFunction<Type, String>() {
@Override
public String map(Type value) throws Exception {
return value.toString();
}
}).writeToSocket(hostname, port, new SimpleStringSchema());
如果你想保留Flink的序列化格式,那么你可以写:
joinedStreamEventDataStream.writeToSocket(
hostname,
port,
new TypeInformationSerializationSchema<>(
joinedStreamEventDataStream.getType(),
env.getConfig()));
如果您想以自己的序列化格式输出它,那么您必须按照Alex的指示实现自己的SerializationSchema
。
答案 1 :(得分:1)
writeToSocket()
方法有3个参数:套接字主机和端口,以及用于序列化数据的SerializationSchema
接口的实现。所以你的实现可能是这样的:
joinedStreamEventDataStream.writeToSocket(
"192.168.1.10", // host name
6998, // port
new SerializationSchema<Integer>() {
@Override
public byte[] serialize(Integer element) {
return ByteBuffer.allocate(4).putInt(element).array();
}
}
);
如果joinedStreamEventDataStream
具有DataStream<Integer>
类型,则属实。