按照你的数据量模拟了一个内存表,在4G内存限制的节点上跑了,没有出现OOM。数据表占用0.8G左右,最后生成的pivot表0.6G左右。中间过程还会需要一些内存。使用更细粒度的分区在这个case中并不会减少内存的使用。因为原始数据就是一个时间点一个股票一条数据,最后pivoting也需要这么多数据。使用分布式反而会增加一些中间数据的开销。
n = 40450164 syms ="c" + string(1..2204) dts = 2020.01.01T00:00:00 + 1..23095 * 60 t = table(rand(syms, n) as sym, rand(dts, n) as datetime, rand(100.0, n) as close).sortBy!(`datetime`sym) close_pivot = select close from t pivot by datetime, sym
建议节点重新启动,测试一下上面的代码,是否会造成OOM。