Google cloud dataflow 如何在数据流中将HashMap作为边输入传递

Google cloud dataflow 如何在数据流中将HashMap作为边输入传递,google-cloud-dataflow,Google Cloud Dataflow,我正在尝试将HashMap作为数据流管道中的边输入传递。我找不到任何例子,除了少数传递字符串、Int或Long的例子。我的代码: tagList=pipeline.apply(TextIO.Read.named(“tagListTextRead”).from(“gs://mybucket/tag list.json”); PCollection tagMap=tagList .apply(ParDo.named(“allTagsToTagMap”)。of(new Tags.BuildTagLis

我正在尝试将HashMap作为数据流管道中的边输入传递。我找不到任何例子,除了少数传递字符串、Int或Long的例子。我的代码:

tagList=pipeline.apply(TextIO.Read.named(“tagListTextRead”).from(“gs://mybucket/tag list.json”);
PCollection tagMap=tagList
.apply(ParDo.named(“allTagsToTagMap”)。of(new Tags.BuildTagListMapFn());
PCollectionView标记映射视图=
allTags.apply(View.asMap());
第三条语句给出了一个语法错误


应用的方法(pttransform这里有两个不同的答案,具体取决于管道的细节

  • 如果您有一个
    PCollection
    ,则可以使用
    View.asMap()
    生成
    PCollectionView
    。无需自己构建
    映射

  • 如果您有一个带有单个元素的
    PCollection
    ,则可以使用
    View.asSingleton()
    进行侧输入

  • 第一种可能是最自然的,您的代码最终看起来像

    PCollectionView=管道
    .apply(“tagListTextRead”,TextIO.Read.from(“gs://mybucket/tag list.json”))
    .apply(“tagsToKv”,新标签.TagToKvFunction())
    .apply(“viewTags”,View.asMap())
    
    展开此项以显示中间值的类型:

    PCollection标签=
    apply(“taglistextread”,TextIO.Read.from(“gs://mybucket/tag list.json”))
    PCollection kvs=
    rawTags.apply(“tagsToKv”,new Tags.TagToKvFunction())
    PCollectionView=
    apply(“viewTags”,View.asMap())
    
    非常感谢。这对我来说很有效。我的案例是#2,所以我需要使用asSingleton。