我正在尝试使用火花簇以两个步骤的形式在python中运行仿真:
执行(在多个工作程序节点上并行执行)一组python函数。这些结果将以文本文件的形式写出
收集结果。这将使用pyspark数据帧进行。
是否可以指示spark在Spark集群中的工作程序节点上执行python代码(即使用普通python)以实现此第一步?
当我尝试使用spark-submit
时,只有Spark上下文中的命令才在Spark集群上执行。其余的python代码在本地计算机上执行,我不想这样做。
这个答案似乎拒绝了:Using regular python code on a Spark cluster,但并不是很明确。
以第1步为例,我有一个名为draw_from_uniform_distribution.py
的脚本,其工作原理如下:
import numpy
the_output_file=sys.argv[1] #get output file from command line
the_number=numpy.random.uniform(size=1)
f_out=open(the_output_file,'w')
print(the_number,file=f_out)
我想在Spark集群上并行运行此脚本1000次。我该怎么办?
答案 0 :(得分:0)
您可以看看joblib的spark后端是如何完成的 (https://github.com/joblib/joblib-spark)
相关代码如下:
from pyspark.sql import SparkSession
from pyspark import cloudpickle
...
spark = SparkSession.build(...)
spark.sparkContext.parallelize([0], 1)\
.map(lambda: cloudpickle.dumps(your_function()))\
.first()
要运行的功能通过pickle进行序列化,并在提供给pyspark的“虚拟” RDD(由一个元素和一个分区组成)上执行spark map()操作。