【发布时间】:2016-06-16 14:19:32
【问题描述】:
示例:
我们有两个通过读取 csv 创建的时间序列惰性映射序列。这 两个惰性序列从不同的日子开始:
INPUT
lazy-seq1
({:date "20110515" :val1 123}
{:date "20110516" :val1 143}
{:date "20110517" :val1 1153} ...)
lazy-seq2
({:date "20110517" :val2 151}
{:date "20110518" :val2 1330} ...)
EXPECTED OUTPUT
lazy-seq3
({:date "20110515" :vals {:val1 123}}
{:date "20110516" :vals {:val1 143}}
{:date "20110517" :vals {:val1 1153 :val2 151}}
{:date "20110518" :vals {:val1 ... :val2 1330}}
...))
确切地说,:date 的类型不是字符串,而是 clj-time 强制的 Jodatime 并且 :date 为每个序列排序。
第一个选择是使用 group-by 函数,但我猜这不能创建惰性序列。我认为 group-by 需要热切的评估。
第二个选择是使用 partition-by 函数,但由于我缺乏闭包技巧,我无法将其应用于我的 INPUTS。
输入 seq 非常大(每个序列约 1GB),我想一次计算许多(约 100)个序列。 所以,我想要惰性求值来避免内存不足错误。
【问题讨论】:
-
你的输入序列是按日期排序的吗?
标签: clojure merge data-conversion lazy-sequences