Google Dataflow内部联接在列表[]中提供联接

时间:2017-09-24 17:59:50

标签: java google-cloud-platform google-cloud-dataflow

我使用谷歌数据流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:462%google3%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));
  }
}

2 个答案:

答案 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);
                }
            }
          }