我有一组数据点,每个数据点都由字典描述。每个数据点的处理都是独立的,我将每个数据点作为单独的作业提交给集群。每个数据点都有一个唯一的名称,我的集群提交包装器只需调用一个脚本,该脚本采用数据点的名称和描述所有数据点的文件。然后该脚本访问文件中的数据点并执行计算。
由于每个作业都必须加载所有点的集合以检索要运行的点,因此我想通过将描述点集的文件序列化为易于检索的格式来优化此步骤。
我尝试使用 JSONpickle,使用以下方法,将描述所有数据点的字典序列化到文件:
def json_serialize(obj, filename, use_jsonpickle=True):
f = open(filename, 'w')
if use_jsonpickle:
import jsonpickle
json_obj = jsonpickle.encode(obj)
f.write(json_obj)
else:
simplejson.dump(obj, f, indent=1)
f.close()
该字典包含非常简单的对象(列表、字符串、浮点数等),总共有 54,000 个键。json 文件的大小约为 20 兆字节。
将此文件加载到内存中大约需要 20 秒,这对我来说似乎很慢。我切换到使用具有相同对象的 pickle,发现它生成了一个大小约为 7.8 MB 的文件,并且可以在大约 1-2 秒内加载。这是一个显着的改进,但看起来加载一个小对象(少于 100,000 个条目)应该更快。除此之外,pickle 不是人类可读的,这对我来说是 JSON 的一大优势。
有没有办法使用 JSON 来获得类似或更好的加速?如果没有,您对构建它有其他想法吗?
(将描述每个事件的文件简单地“切片”成一个单独的文件并将其传递给在集群作业中运行数据点的脚本是正确的解决方案吗?这似乎可能导致文件激增)。
谢谢。