在我的例子中,原始数据存储在NoSQL上。在训练ML模型之前,我应该在NoSQL上预处理原始数据。此时,如果我预处理原始数据,那么保留预处理数据的最佳方法是什么? 1.将它保存在内存中2.将它保存在NoSQL 3中的另一个表中。你能推荐其他选项吗?
取决于您的用例,数据大小,技术堆栈和机器学习框架/库。说实话,在不了解您的数据和要求的情况下,SO上的任何人都无法为您提供完整的答案。
在将数据传递给模型/运行模型方面,将其加载到内存中。如果达到内存限制,请查看将数据批量处理到模型中。或使用AWS EMR集群!
关于存储数据的问题,我将使用前面回答的Spark示例并尝试给出一些通用规则。
对于Spark,最好的办法是将其写为分区的parquet
文件或Hive数据仓库。
关于这两个问题的关键是它们是分布式的。 Spark将创建包含所有数据的N
镶木地板文件。在将数据集读入内存时(在运行模型之前),它可以同时读取多个文件 - 节省了大量时间。 Tensorflow与TFRecords格式类似。
如果您的NoSQL数据库是分布式的,那么您可以使用它。
如果处理完全没有时间并且它不用于其他工作,那么就没有必要存储它。这是浪费时间。甚至不要考虑它。只需专注于您的模型,将数据存储在内存中并开始运行。
您需要仔细考虑处理时间与数据存储能力之间的权衡。
存储这些数据需要多少钱?需要多久一次?这对业务至关重要吗?当有人问这个问题时,它总是“需要做昨天”的请求吗?等等。
—-