Apache spark 使用mapPartitions时,二进制文件何时加载到内存中?
我正在使用PySpark将经过培训的深度学习模型应用于图像,并关注内存使用情况如何与我当前的方法相适应。由于加载经过训练的模型需要一段时间,因此我在每个worker上处理了大量图像,代码如下所示:Apache spark 使用mapPartitions时,二进制文件何时加载到内存中?,apache-spark,pyspark,azure-data-lake,Apache Spark,Pyspark,Azure Data Lake,我正在使用PySpark将经过培训的深度学习模型应用于图像,并关注内存使用情况如何与我当前的方法相适应。由于加载经过训练的模型需要一段时间,因此我在每个worker上处理了大量图像,代码如下所示: def运行评估(文件生成器): 训练模型=负荷模型() 结果=[] 对于文件生成器中的文件: #“file”是元组:[0]是其文件名,[1]是字节数据 results.append(trained_model.eval(文件[1])) 返回(结果) my_rdd=sc.binaryFiles('adl
def运行评估(文件生成器):
训练模型=负荷模型()
结果=[]
对于文件生成器中的文件:
#“file”是元组:[0]是其文件名,[1]是字节数据
results.append(trained_model.eval(文件[1]))
返回(结果)
my_rdd=sc.binaryFiles('adl://my_file_path/*.png')。重新分区(工人数量)
结果=my_rdd.mapPartitions(运行评估)
结果:收集()
如上所述,这些文件存储在关联的HDFS文件系统(特别是Azure Data Lake存储)上,可以通过SparkContext访问该文件系统
我的主要问题是:
- 图像数据何时加载到内存中?
- 当生成器递增(“即时”)时,是否加载了每个图像的数据
- 在辅助进程启动之前,是否加载了整个分区的所有映像数据
- 头节点负责从该关联文件系统加载数据(可能会造成瓶颈),还是工作人员从中加载自己的数据
- 当生成器递增(“即时”)时,是否加载了每个图像的数据
binaryFiles
具有minPartitions
参数,可用于控制分区数
另一个问题是非惰性结果
列表
。使用生成器表达式更有意义:
def运行评估(文件生成器):
训练模型=负荷模型()
对于文件生成器中的文件:
收益率模型.eval(文件[1])
头节点负责从该关联文件系统加载数据(可能会造成瓶颈),还是工作人员从中加载自己的数据
不涉及中央处理。每个执行器进程(Python)/线程(JVM)将加载自己的数据集部分