现在,我有以下代码:
pdf.ix[0.55,2500] = 42
答案 0 :(得分:1)
您希望从pubsub中读取一些消息,并通过在空格字符上拆分消息将每个消息转换为多个部分,然后将这些部分提供给管道的其余部分。不需要PubsubIO的特殊配置,因为它不是“读取数据”问题 - 它是“你已经阅读过的数据转换”问题 - 你只需要插入一个ParDo,它可以获取你的“复合”记录并将其分解为你想要的方式,例如:
PCollection<String> input_data =
pipeline
.apply(PubsubIO
.Read
.withCoder(StringUtf8Coder.of())
.named("ReadFromPubSub")
.subscription("/subscriptions/project_name/subscription_name"))
.apply(ParDo.of(new DoFn<String, String>() {
public void processElement(ProcessContext c) {
String composite = c.element();
for (String part : composite.split(" ")) {
c.output(part);
}
}}));
}));
答案 1 :(得分:0)
我认为你的意思是你想要的数据存在于PCollection的不同元素中,并希望以某种方式提取和分组。
一种可能的方法是编写一个DoFn函数来处理PCollection中的每个String。您为要分组的每个数据输出一个键值对。然后,您可以使用GroupByKey转换将所有相关数据组合在一起。
例如,您在PCollection中有来自pubsub的以下消息:
DoFn函数将输出一个键值对,其中用户ID为键,项目作为值购买。 (&lt; 1234,A&gt;,&lt; 1234,B&gt;)。 使用GroupByKey变换,您可以将两个值组合在一个元素中。然后,您可以对该元素执行进一步处理。
这是bigdata中一种非常常见的模式,称为mapreduce。
答案 2 :(得分:0)
您可以输出Iterable<A>
,然后使用Flatten
来压缩它。不出所料,这在许多下一代数据处理平台中被称为flatMap
,c.f。 spark / flink。