从 PCollections 获取列表

Posted

技术标签:

【中文标题】从 PCollections 获取列表【英文标题】:Getting List From PCollections 【发布时间】:2018-12-02 19:29:23 【问题描述】:

我想要一个来自 Pcollection 的列表值。

PCollection<List<Integer>> lst =    bqT2.apply(ParDo.of(new 
UserId()));  // line 1
List myList = lst.getAll(); // line 2 

但是没有“getAll()”函数

我发现了类似的东西

    List<String> dummylist = Arrays.asList(dummy);
    DoFnTester<String,String> fnTester = DoFnTester.of(new AAA(mapview));
    fnTester.setSideInputInGlobalWindow(mapview, csvlist);
    //dummylines.apply(ParDo.of(fnTester));
    List<String> results = fnTester.processBatch(dummylist);

但我没有找到任何使用“DoFnTester”函数获取列表项的方法。

有没有办法从 PCollection 中列出?

为了详细说明,我有两个 PCollection。

PCollection   p1 = pipeline.apply("",
BigQueryIO.read().fromQuery("SELECT * from myTable where userid in " +  lst + ));

注意:lst 来自第 1 行

不确定谷歌数据流是否不支持简单的用例。

【问题讨论】:

【参考方案1】:

如果列表适合内存,apache_beam.transforms.combiners.ToList 可以为您工作。

beam.combiners.ToList() 是 Python 版本。

【讨论】:

beam.combiners.ToList() 创建一个带有单个元素的 PCollection,即您想要的列表。但是,它仍然不允许您将该列表作为普通 Python 对象访问。【参考方案2】:

由于数据流管道的分布式特性,无法直接从 PCollection 访问数据。

不要转换为列表,而是执行“组合”转换,将多个整数的 PCollection 转换为包含 SQL 查询中所需的单个列表元素的 PCollection,并使用之前的 PCollection 与 BigQuery 读取查询链接到另一个转换(整数列表)。

【讨论】:

你能通过修改上面的代码更清楚地说明“组合”变换吗? Combine 是一种用于组合元素集合的转换。应用组合转换时,您必须提供包含用于组合元素或值的逻辑的函数。请注意,只有在这些值退出管道后,您才能使用它们。例如,this answer 提供了将 PCollection 转换为列表的示例,并将 SQL 查询写入文件,然后您可以使用该文件运行查询。

以上是关于从 PCollections 获取列表的主要内容,如果未能解决你的问题,请参考以下文章

数据流如何组合 PCollections 替换对象

Java Apache Beam PCollections 以及如何使它们工作?

列表与 VStack(在 ScrollView 中)

第02讲集合类和列表类控件

mybatis里返回类型用resultmap映射的时候,如果resultmap写了一个collec

在 UICollectionViewCell 中获取图像