簡體   English   中英

使用 apache 梁/谷歌雲數據流讀取多行 JSON

[英]Read multiline JSON using apache beam / google cloud dataflow

我正在嘗試讀取管道中的 JSON 文件(多行),但beam.io.ReadFromText(somefile.json讀取一行。

我正在嘗試將文件內容讀取為 JSON,以便我可以在每個類別上應用map以下載相關產品文件。

這是我的JSON文件(productindex.json) 的樣子:

{
  "productcategories" : {
    "category1" : {
      "productfile" : "http://products.somestore.com/category1/products.json"
    },
    "category2" : {
      "productfile" : "http://products.somestore.com/category2/products.json"
    },
    "category3" : {
      "productfile" : "http://products.somestore.com/category3/products.json"
    },
    "category4" : {
      "productfile" : "http://products.somestore.com/category4/products.json"
    }
}

這是我的管道開頭的樣子:

with beam.Pipeline(options=pipeline_options) as p:
    rows = (
        p | beam.io.ReadFromText(
            "http://products.somestore.com/allproducts/productindex.json")
    )

我正在使用apache-beam[gcp]模塊。

我如何實現這一目標?

Apache Beam / Cloud Dataflow 不直接支持讀取多行 Json 數據。

主要原因是這很難並行執行。 Beam 如何知道每條記錄的結束位置? 這對於單個閱讀器來說很容易,但對於並行閱讀器來說非常復雜。

我可以推薦的最佳解決方案是在 Beam / Dataflow 處理之前將您的 Json 數據轉換為換行符分隔的 Json (NDJSON)。 這可能就像更改上游任務寫入的輸出格式一樣簡單,也可能需要預處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM