【发布时间】:2021-11-08 10:34:59
【问题描述】:
我有一个大的 JSON 文件,其中包含这样的对象列表:
{
"_index":"pelias",
"_type":"address",
"_id":"jf808cdawi46z",
"_score":1,
"_source":{
"center_point":{
"lon":106.66307,
"lat":10.959882
},
"name":{
"default":"375/20 Bùi Quốc Khánh, Chánh Nghĩa, Bình Dương, Việt Nam"
}
}
}
{
"_index":"pelias",
"_type":"address",
"_id":"jf808cdawi46z",
"_score":1,
"_source":{
"center_point":{
"lon":106.66307,
"lat":10.959882
},
"name":{
"default":"375/20 Bùi Quốc Khánh, Chánh Nghĩa, Bình Dương, Việt Nam"
}
}
}
我正在使用 jq 将其转换为这样的 csv:
"address","lat","lon"
"375/20 Bùi Quốc Khánh, Chánh Nghĩa, Bình Dương, Việt Nam",10.959882,106.66307
"375/20 Bùi Quốc Khánh, Chánh Nghĩa, Bình Dương, Việt Nam",10.959882,106.66307
我正在使用此代码:
cat pelias_minify.json | jq -r -s '. | [.[] | {lat: ._source.center_point.lat, lon: ._source.center_point.lon, address: ._source.name.default}] | (map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv' > pes.csv
问题在于该文件的大小已超过 2GB。我正在研究应用流,但仍然不明白如何使用它。请问有什么帮助吗?非常感谢。
更新,我尝试了这段代码,我可以流式传输文件输出:
cat pelias_minify.json | jq -cn --stream 'fromstream(0|truncate_stream(inputs)) | {lat: ._source.center_point.lat, lon: ._source.center_point.lon, address: ._source.name.default}'
输出:
{"center_point":{"lon":106.66307,"lat":10.959882},"name":{"default":"375/20 Bùi Quốc Khánh, Chánh Nghĩa, Bình Dương, Việt Nam"}}
{"center_point":{"lon":106.66307,"lat":10.959882},"name":{"default":"375/20 Bùi Quốc Khánh, Chánh Nghĩa, Bình Dương, Việt Nam"}}
【问题讨论】: