我使用谷歌数据流CoGbkResult将两个表连接为内连接。
我能够成功加入该表。 我正在将输出写入文本文件,并能够验证连接。但是,连接会将匹配结果放入列表中。
像这样的东西。
template <typename T>
constexpr bool has_converter = ???;
301%103%203%2017-09-20 07:49:46[2%google, 3%google, 1%microsoft]
301%105%200%2017-09-17 11:48:59[2%google, 3%google, 1%microsoft]
来自table_1。 301%103%203%2017-09-20 07:49:46
,2%google
,3%google
是表格中加入的匹配结果。
以下是我的1%microsoft
方法:
processElement
我想知道如何才能获得单行输出。例如:
public void processElement(ProcessContext c) {
KV<String, CoGbkResult> e = c.element();
String Ad_ID = e.getKey();
Iterable<String> Ad_Info = null;
Ad_Info = e.getValue().getAll(AdInfoTag);
for (String ImpressionInfo : c.element().getValue().getAll(ImpressionInfoTag)) {
// Generate a string that combines information from both collection values
c.output(KV.of(Ad_ID, "%" + ImpressionInfo + Ad_Info));
}
}
答案 0 :(得分:1)
我对你要输出的内容的理解(部分猜测)是你要为第一个和第二个可迭代的每个条目输出一行,但我不确定为什么你不能使用两个for循环而不是将iterable转换为字符串然后解析它。例如:
public void processElement(ProcessContext c) {
KV<String, CoGbkResult> e = c.element();
String Ad_ID = e.getKey();
Iterable<String> Ad_Infos = e.getValue().getAll(AdInfoTag);
for (String ImpressionInfo : c.element().getValue().getAll(ImpressionInfoTag)) {
for (String Ad_Info : Ad_Infos) {
c.output(KV.of(Ad_ID, "%" + ImpressionInfo + Ad_Info));
}
}
}
答案 1 :(得分:0)
我设法通过解析器获得了这个。 GCP数据流是否为此提供了一种方法?
int jointbegin = outputstring.indexOf(“[”); String firsthalf = outputstring.substring(0,jointbegin); String secondhalf = outputstring.substring(outputstring.indexOf(“[”)+ 1,outputstring.indexOf(“]”));
if (!secondhalf.isEmpty())
{
String[] ad_data = secondhalf.split(",");
for (int i = 0; i < ad_data.length; i++)
{
String final_string = firsthalf + ad_data[i];
c.output(final_string);
}
}
}