Google cloud platform apache beam java中json字符串行中存在的Groupby现有属性
我正在从GCS读取json文件,我必须将数据加载到不同的BigQuery表中。对于同一客户,这些文件可能有多个具有不同时间戳的记录。我必须为每个客户挑选最新的。我计划实现以下目标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之前,您需要将数据集设置
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){}))代码>尽管在使用JSONObjectorg.apache.beam.sdk.values.KV时我遇到了以下错误:无法为org.json.JSONObject
提供编码器。现在使用toString()但是我们必须在两个地方进行json/string/json转换。如何让我们的自定义编码器消除此问题这是一个返回JsonArray的JSON编码器示例-您也可以这样做,但使用JsonObject时:您是否尝试过KVCoder.of(StrUtf8Coder.of(),JsonObjectCoder.of())?这很有效。谢谢