Код, кажется, просто зависает после обработки ~ 15 миллионов строк - PullRequest
1 голос
/ 29 марта 2019

Следующая функция, кажется, просто останавливается через некоторое время при запуске файла с ~ 21 миллионами строк. Он печатает до 15520000 и затем останавливается. Я проверил его с небольшими файлами, и в этом случае он отлично работает.

#lang racket

(define (read-csv name)
  (define item-hash (make-hash))
  (define user-hash (make-hash))
  (define list-hash (make-hash))
  (define item-number 0)
  (define user-number 0)
  (define n 0)

  (with-input-from-file name
    (thunk
     (for ([line (in-lines)])
       (define row (string-split line ","))
       (match-define (list user item score) row)
       (when (= item-number
                (hash-ref! item-hash item item-number))
         (set! item-number (+ 1 item-number)))
       (when (= user-number
                (hash-ref! user-hash user user-number))
         (set! user-number (+ 1 user-number)))

       (when (= 0(modulo n 10000))
         (display n)
         (display "\n"))
       (set! n (+ 1 n))

       (let ([l (hash-ref! list-hash user '())])
         (hash-set! list-hash user (cons (cons item score) l))))))

  (list item-hash user-hash list-hash))
...