10+G 的 JSON 文件,大概有几千万条记录,每条记录的 fields 或多或少不太一样,现在我想把这个 json 弄到 Postgres 里,而且只想要其中的 2 个公共 fields (所有的记录都有这两个属性)。对了,容器我只给了 2G 内存,除去运行的程序,可能只剩 700MB+的空余内存了。
现在的 2 个想法是:
1 、用 Pandas 的 read_json()的 chunksize 来把 json 读取成流文件,然后一个 chunk 接一个 chunk 地读取到内存,然后写到数据库里。 但是我在容器里实现时,每次都是 python 进程被 kill 了,可能是内存问题,但我的 chunksize 填 10 也一样失败,10 行数据也不大呀,百思不得其解。
2 、想用 Bash 的 jq 来处理,但是没有经验,不知道是否可行,以及在容器上执行的效率还有内存占用问题。
不知道有没有大佬能指点一下,比如有没有更好的流处理办法,谢谢!
1
pabupa 2020-09-30 03:13:42 +08:00
虽然 chunk 很小,但是最终结果肯定比内存大。
所以: 1,去掉文件中的最外层包裹字符,只剩下`{key:val,...}...` 2,从文件中读取字符,直到`}`为止,然后尝试解析 buffer 。解析成功,则继续下一个 document ;解析不成功,就继续找下一个`}`,更新 buffer 。 3, 每成功解析 N 个就写一次数据库。 |