跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 在容器里 Parse 大体积的 JSON 文件到 Postgres 有什么好办法吗?主要是内存占用还有效率问题。
未分類
2 10 月 2020

在容器里 Parse 大体积的 JSON 文件到 Postgres 有什么好办法吗?主要是内存占用还有效率问题。

在容器里 Parse 大体积的 JSON 文件到 Postgres 有什么好办法吗?主要是内存占用还有效率问题。

資深大佬 : nuistzhou 3

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 来处理,但是没有经验,不知道是否可行,以及在容器上执行的效率还有内存占用问题。

不知道有没有大佬能指点一下,比如有没有更好的流处理办法,谢谢!

大佬有話說 (2)

  • 資深大佬 : pabupa

    虽然 chunk 很小,但是最终结果肯定比内存大。

    所以:

    1,去掉文件中的最外层包裹字符,只剩下`{key:val,…}…`
    2,从文件中读取字符,直到`}`为止,然后尝试解析 buffer 。解析成功,则继续下一个 document ;解析不成功,就继续找下一个`}`,更新 buffer 。
    3, 每成功解析 N 个就写一次数据库。

  • 主 資深大佬 : nuistzhou

    @pabupa 谢谢!虽然我已经搞定了,但发现写 9 百万数据都要几个小时,太恐怖了,那我另一个 8 千万条的文件岂不是要疯了。在考虑用 spark 之类的了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具