Clojure 从edn文件读取映射时出现重复密钥异常
我正在使用将Clojure映射持久化到文件Clojure 从edn文件读取映射时出现重复密钥异常,clojure,Clojure,我正在使用将Clojure映射持久化到文件 (spit (str tmpdir "/" "results.edn") (.toString c)) 其中c是一个非常大的哈希映射(文件为201MB)。映射的键是字符串,值是数字 当我试图从文件中读回映射时,我得到了一个重复的密钥异常。下面是我如何尝试重新阅读的 (def phrases (edn/read (PushbackReader. (io/reader
(spit (str tmpdir "/" "results.edn") (.toString c))
其中c
是一个非常大的哈希映射(文件为201MB)。映射的键是字符串,值是数字
当我试图从文件中读回映射时,我得到了一个重复的密钥异常。下面是我如何尝试重新阅读的
(def phrases (edn/read
(PushbackReader.
(io/reader
"/tmp/mednotes8910030368496690883/results.edn"))))
当映射被写入edn文件时,它如何以重复键结束?有什么想法吗
以下是例外的内容:
Caused by java.lang.IllegalArgumentException
Duplicate key: ? 5
PersistentHashMap.java: 67 clojure.lang.PersistentHashMap/createWithCheck
RT.java: 1538 clojure.lang.RT/map
EdnReader.java: 631 clojure.lang.EdnReader$MapReader/invoke
EdnReader.java: 142 clojure.lang.EdnReader/read
EdnReader.java: 108 clojure.lang.EdnReader/read
edn.clj: 35 clojure.edn/read
edn.clj: 33 clojure.edn/read
AFn.java: 154 clojure.lang.AFn/applyToHelper
AFn.java: 144 clojure.lang.AFn/applyTo
根据要求,以下是地图中的示例:
{"cervical region of" 32,
"partial brachial" 64,
"is an effective medication for" 32,
", as stopping them" 32,
", supportive treatment" 160,
"should be eating a normal" 128,
"o call back if supplement" 32,
"diagnosiscod diabc }" 32,
"days in case of allergies" 32,
"ointment 8 drops" 32,
"leg from pinched" 32,
...
@fl00r在注释中建议grep results.edn文件中的字符串“?5”。使用egrep显示该字符串前后的20个字符,我得到了该键的4个条目:
[/tmp/mednotes8910030368496690883]> egrep -o ".{20}\"\? 5\" .{20}" results.edn
oothbrush for" 160, "? 5" 32, ". ) during his
t with sutures" 32, "? 5" 352, "4.81 pounds" 1
"being up all" 32, "? 5" 32, "limited financi
everytime she" 32, "? 5" 32, "had a partial m
有趣的是,4个中有3个具有完全相同的计数。仍然不确定当从一个看起来不错的没有这些重复的映射中写入时,会发生什么情况。您的一些输入(c的内容)会有很大帮助。您应该使用
(pr str)
打印对象,以确保读卡器可以读取它。@Andre我想。toString是对pr str的调用,有人知道吗?一般来说,最好使用pr*函数,尽管我找不到一个例子。在地图上搜索返回的内容不等于pr str返回的内容。他的数据已损坏(上次运行时部分写入的结果)或者我的假设不正确?因此,现在您遇到了一个全新的问题:)