Yeah, rewrite that to not hold the head of "lines". In particular, get rid
of "counts" entirely, get rid of "(nth lines ...)", and use something like

(loop [lines (seq lines)
       res {}]
  (if lines
    (recur (next lines) (update-res res (first lines)))
    res))

as your loop.



On Tue, Nov 12, 2013 at 3:19 AM, Jiaqi Liu <liujiaq...@gmail.com> wrote:

> hi , guys
> I wrote the following codes to parse log files.
> it's alright to parse small one.
> But with big log files , i got the following error:
> "OutOfMemoryError GC overhead limit exceeded  clojure.core/line-seq
> (core.clj:2679)"
>
> (defn parse-file
>   ""
>   [file]
>   (with-open [rdr (io/reader file)]
>     (println "Statistic result : " (parse-recur rdr))))
>
> (defn parse-recur
>   ""
>   [rdr]
>   (let [lines (line-seq rdr)
>         counts (count lines)]
>     (loop [len counts
>            res {}]
>       (if (zero? len)
>         res
>         (recur (dec len)
>                  (update-res res (nth lines (- counts len))))))))
>
> (defn update-res
>   ""
>   [res line]
>   (let [params (string/split line #",")
>         id     (if (> (count params) 1) (params 0) "0")]
>        (if (res id)
>          (update-in res [id] inc)
>          (assoc res id 1))))
>
>
> How can fix this bug ?
> and how to optimize this produce to run faster ?
>
> Any suggestion will be appreciated~
>
> BR
>
> ------------------------------------
>
> 刘家齐 (Jacky Liu)
>
>
>
> 手机:15201091195        邮箱:liujiaq...@gmail.com
>
> Skype:jacky_liu_1987   QQ:406229156
>
> --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to