如何使用单个接收器发出“侧面输出”和“过程输出”。在这种情况下,两种输出都需要发送到单个接收器,并且基于标记文件夹路径而有所不同
例如
OutputTag<String> outputTag = new OutputTag<String>("side-output") {};
SingleOutputStreamOperator<String> mainDataStream = source.process(new ProcessFunction<String, String>() {
@Override
public void processElement(String value, Context ctx, Collector<String> out) {
try {
builder.parse(new InputSource(new StringReader(value)));
out.collect(value);
} catch (SAXException | IOException e) {
ctx.output(outputTag, value);
}
}
});
DataStream<String> sideOutputStream = mainDataStream.getSideOutput(outputTag);
还有其他更好的解决方案吗?只是担心性能
答案 0 :(得分:0)
如果要使用单个接收器,则可以在输出格式中添加属性,并使用该属性来标识单个接收器中的数据源。
您还可以构造两个具有不同参数的接收器,以接收来自不同来源的数据。我认为,在不考虑您使用的数据库的情况下,这种多线程方式具有更好的性能。
答案 1 :(得分:0)
Flink的BucketingSink可以使用Bucketer来确定将使用基本目录中的哪个子目录。因此,您可以使用它来根据要写入的记录中的属性来设置子目录。
就使用单个接收器而言,由于函数的主输出和侧面输出都是String对象(相同类型),因此可以mainDataStream.union(sideOutputStream)
将两个流一起from tkinter import *
calculator = Tk()
calculator.title("Calculator")
calculator.resizable(0, 0)
class Application(Frame):
def __init__(self, master, *args, **kwargs):
Frame.__init__(self, master, *args, **kwargs)
self.createWidgets()
def createWidgets(self):
self.display = Entry(self, font=("Helvetica", 16), relief=RAISED, justify=RIGHT)
self.display.insert(0, "default value")
self.display.grid(row=0, column=0)
app = Application(calculator).grid
calculator.mainloop()
输出结果。