gpt4 book ai didi

Clojure - 加速大文件处理

转载 作者:行者123 更新时间:2023-12-03 00:26:18 24 4
gpt4 key购买 nike

我需要读取大文件(~1GB),处理它并保存到数据库。我的解决方案如下所示:

数据.txt

格式:[id],[标题]\n

1,Foo
2,Bar
...

代码

(ns test.core
(:require [clojure.java.io :as io]
[clojure.string :refer [split]]))

(defn parse-line
[line]
(let [values (split line #",")]
(zipmap [:id :title] values)))

(defn run
[]
(with-open [reader (io/reader "~/data.txt")]
(insert-batch (map parse-line (line-seq reader)))))

; insert-batch just save vector of records into database

但是这段代码不能很好地工作,因为它首先解析所有行,然后将它们发送到数据库中。

我认为理想的解决方案是读取行 -> 解析行 -> 收集 1000 个已解析行 -> 将它们批量插入数据库 -> 重复直到没有行。不幸的是,我不知道如何实现这个。

最佳答案

一个建议:

  • 使用line-seq获取延迟的行序列,

  • 使用map解析每一行,

(到目前为止,这与您正在做的事情相符)

  • 使用partition-all将解析行​​的惰性序列划分为批处理,然后

  • 使用插入批处理 doseq将每个批处理写入数据库。

还有一个例子:

(->> (line-seq reader)
(map parse-line)
(partition-all 1000)
(#(doseq [batch %]
(insert-batch batch))))

关于Clojure - 加速大文件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com