代码之家  ›  专栏  ›  技术社区  ›  ShubhamR

如何将Pcollection<String>变量转换为字符串

  •  0
  • ShubhamR  · 技术社区  · 6 年前

    我有 P收集(&L);字符串(>); 类型的字符串,我想将其转换为从BigQuery表中获取特定列的值。所以我用 BigQueryIO。readTableRows 从BigQuery获取值。

    这是我的代码:

         PCollection<TableRow> getConfigTable = pipeline.apply("read from Table",
                BigQueryIO.readTableRows().from("TableName"));
    
        RetrieveDestTableName retrieveDestTableName = new RetrieveDestTableName();
        PCollection<String> getDestTableName = getConfigTable.apply(ParDo.of(new DoFn<String,String>(){
            @ProcessElement
            public void processElement(ProcessContext c){
                c.output(c.element().get("ColoumnName").toString());
            }
        }));
    

    根据以上代码,我将从 getDestTableName 类型为PCollection<字符串(>);但我想要这个输出 一串 变量

    有没有办法转换 P收集(&L);字符串(>); 一串 数据类型变量,以便我能够在代码中使用变量?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Andrew Nguonly    6 年前

    转换 PCollection<String> 到a String 在Apache Beam编程模型中不可能。A. PCollection 简单描述管道在任何给定点的状态。在开发过程中,您对 P收集

    您可以在 P收集 通过变换。然而,似乎需要表配置来构建管道的其余部分。您需要提前知道目的地,或者您可以使用 DynamicDestinations 确定在管道执行期间写入哪个表。无法从中获取表配置值 P收集 并将其用于进一步建设管道。

        2
  •  0
  •   jkff    6 年前

    看来你想要的是 JdbcIO.readAll() 但对于BigQuery,允许读取配置由管道动态计算。这目前没有为BigQuery实现,但这是一个合理的请求。

    同时,您可以选择:

    • 将您正在执行的操作表示为更复杂的BigQuery SQL查询,并使用 BigQueryIO.read().fromQuery()
    • 表示管道中提取感兴趣表的部分,不使用Beam API,而是直接使用BigQuery API,因此您操作的是常规Java变量,而不是 PCollection s