最近我打算将我的独立python ML代码迁移到spark.ML管道spark.ml非常方便,使用简化的API来链接算法阶段和超参数网格搜索.
尽管如此,我发现它支持现有文档中的一个重要特征:缓存中间结果.当管道涉及计算密集阶段时,会出现此功能的重要性.
例如,在我的情况下,我使用一个巨大的稀疏矩阵来对时间序列数据执行多个移动平均,以便形成输入要素.矩阵的结构由一些超参数确定.这一步结果是整个管道的瓶颈,因为我必须在运行时构造矩阵.
在参数搜索期间,我通常还有其他参数来检查除"结构参数"之外的其他参数.因此,如果我可以在"结构参数"不变的情况下重复使用巨大的矩阵,那么我可以节省大量的时间.出于这个原因,我故意形成了我的代码来缓存和重用这些中间结果.
所以我的问题是:Spark的ML管道可以自动处理中间缓存吗?或者我是否必须手动编写代码才能这样做?如果是这样,有什么最佳实践可供学习吗?
PS我已经查看了官方文档和其他一些材料,但似乎没有人讨论这个主题.
我试图基准的加速Pipe比Queue从multiprocessing包.T认为内部使用Pipe会更快.QueuePipe
奇怪的Pipe是,比Queue发送大型numpy数组要慢.我在这里错过了什么?
管:
import sys
import time
from multiprocessing import Process, Pipe
import numpy as np
NUM = 1000
def worker(conn):
    for task_nbr in range(NUM):
        conn.send(np.random.rand(400, 400, 3))
    sys.exit(1)
def main():
    parent_conn, child_conn = Pipe(duplex=False)
    Process(target=worker, args=(child_conn,)).start()
    for num in range(NUM):
        message = parent_conn.recv()
if __name__ == "__main__":
    start_time = time.time()
    main()
    end_time = time.time()
    duration = end_time - start_time
    msg_per_sec = NUM / duration
    print …Run Code Online (Sandbox Code Playgroud) 我正试图flask在这样的iPython笔记本中运行一个最简单的应用程序演示.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():.
    return 'Hello World!'
if __name__ == '__main__':
    app.run(d)
Run Code Online (Sandbox Code Playgroud)
我第一次运行它,一切都很好.然后我打断了牢房app.run().但是下次我运行时,笔记本会抛出一些错误信息:
An exception has occurred, use %tb to see the full traceback.
SystemExit: 1
Run Code Online (Sandbox Code Playgroud)
然后我%tb编辑并得到以下回溯:
SystemExit                                Traceback (most recent call last)
<ipython-input-7-a59dfe133898> in <module>()
----> 1 myapp.run(debug=True)
C:\Users\Lewis\AppData\Local\Enthought\Canopy\User\lib\site-packages\flask\app.pyc in run(self, host, port, debug, **options)
    770         options.setdefault('use_debugger', self.debug)
    771         try:
--> 772             run_simple(host, port, self, **options)
    773         finally:
    774             # reset the first request …Run Code Online (Sandbox Code Playgroud) 我正在使用该csr_matrix((data, indices, indptr), shape=[row, col])方法创建一个 csr 矩阵。执行构建方法所花费的时间csr_matrix()比构建data, indices, indptr自己多 4 倍。既然我已经有了(data, indices, indptr)元组,那么构建 csr 矩阵难道不应该是微不足道的(而且很快)吗?
我的代码和时间统计是这样的:
data = ...  # 2.207s
indices = ...  # 11.065s       
indptr = ...  # 0.047s          
matrix = csr_matrix((data, indices, indptr), shape=(row, col))  # 57.806s
Run Code Online (Sandbox Code Playgroud)