다음과 같은 개체 목록이 포함된 큰 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"}}
피크에서 알 수 있듯이 출력에서 스트리밍 파서를 jq
호출할 필요가 없습니다 . CSV 출력에 필요한 필드만 효율적으로 필터링할 수 있다면 괜찮을 것입니다. 즉,
jq -r -cn '["address","lat","lon"], (inputs | [._source.name.default,._source.center_point.lat,._source.center_point.lon]) | @csv'
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다