Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform apache beam java中json字符串行中存在的Groupby现有属性_Google Cloud Platform_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud platform apache beam java中json字符串行中存在的Groupby现有属性

Google cloud platform apache beam java中json字符串行中存在的Groupby现有属性,google-cloud-platform,google-cloud-dataflow,apache-beam,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,我正在从GCS读取json文件,我必须将数据加载到不同的BigQuery表中。对于同一客户,这些文件可能有多个具有不同时间戳的记录。我必须为每个客户挑选最新的。我计划实现以下目标 读取文件 按客户id分组 应用DoFn来比较每个组中记录的时间戳,并且只有最新的记录 展开它,将表行插入转换为BQ 但我无法继续执行步骤1。我看到GroupByKey.create(),但无法使其使用客户id作为密钥 我正在使用JAVA实现。任何建议都会大有帮助。谢谢。在使用GroupByKey之前,您需要将数据集设置

我正在从GCS读取json文件,我必须将数据加载到不同的BigQuery表中。对于同一客户,这些文件可能有多个具有不同时间戳的记录。我必须为每个客户挑选最新的。我计划实现以下目标

  • 读取文件
  • 按客户id分组
  • 应用DoFn来比较每个组中记录的时间戳,并且只有最新的记录
  • 展开它,将表行插入转换为BQ
  • 但我无法继续执行步骤1。我看到
    GroupByKey.create()
    ,但无法使其使用客户id作为密钥


    我正在使用JAVA实现。任何建议都会大有帮助。谢谢。

    在使用
    GroupByKey
    之前,您需要将数据集设置为键值对。如果您已经展示了一些代码,但是不知道太多,那么最好执行以下操作:

    PCollection objects=p.apply(FileIO.read(..).apply(FormatData…)
    //一旦我们在JSONObject中获得了数据,我们就可以按客户ID键:
    PCollection groupedData=
    apply(maplements.via(elm->KV.of(elm.getString(“customerId”),elm)))
    .apply(GroupByKey.create())
    
    完成后,您可以检查时间戳并按照您的想法放弃所有最近的bot

    请注意,您将需要设置编码器等-如果您被卡住了,我们可以迭代


    作为提示/提示,你可以考虑。

    谢谢巴勃罗。在上面的代码片段的帮助下,我现在管理了下面的
    pipeline.apply(“Read”,TextIO.Read().from(“”).apply(“),maplements.via(new SimpleFunction(){@Override public KV apply(String json){JSONObject customerJson=new JSONObject(json);返回KV.of(customerJson.getString(“\u id”),customerJson.toString();})).apply(GroupByKey.create()).apply(“在grp中查找最新的”,MapElements.via(新的SimpleFunction(){@Override public String apply(KV groupedElements){}))尽管在使用JSONObject
    org.apache.beam.sdk.values.KV时我遇到了以下错误:无法为org.json.JSONObject
    提供编码器。现在使用toString()但是我们必须在两个地方进行json/string/json转换。如何让我们的自定义编码器消除此问题这是一个返回JsonArray的JSON编码器示例-您也可以这样做,但使用JsonObject时:您是否尝试过KVCoder.of(StrUtf8Coder.of(),JsonObjectCoder.of())?这很有效。谢谢