Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pyspark运行并行程序?_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 如何使用pyspark运行并行程序?

Python 如何使用pyspark运行并行程序?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我想使用我们的spark群集并行运行程序。我的想法是做如下事情: def simulate(): #some magic happening in here return 0 spark = ( SparkSession.builder .appName('my_simulation') .enableHiveSupport() .getOrCreate()) sc = spark.sparkContext no_parallel_instances = sc.

我想使用我们的spark群集并行运行程序。我的想法是做如下事情:

def simulate():
  #some magic happening in here
return 0

spark = (
SparkSession.builder
    .appName('my_simulation')
    .enableHiveSupport()
    .getOrCreate())

sc = spark.sparkContext

no_parallel_instances = sc.parallelize(xrange(500))
res = no_parallel_instances.map(lambda row: simulate())
print res.collect()
我的问题是,是否有一种方法可以使用不同的参数执行simulate。目前我唯一能想到的方法是使用数据帧指定参数,如下所示:

parameter_list = [[5,2.3,3], [3,0.2,4]]
no_parallel_instances = sc.parallelize(parameter_list)
res = no_parallel_instances.map(lambda row: simulate(row))
print res.collect()

是否有另一种更优雅的方式来使用spark运行并行函数?

如果要使用参数化调用的数据在每一行之间不同,则需要在每一行中包含该数据

但是,如果希望设置影响每一行的全局参数,则可以使用广播变量

广播变量在脚本中创建一次,之后无法修改。Spark将有效地将这些值分发给每个执行者,以使它们可用于您的转换。要创建一个,您需要向spark提供数据,它会返回一个句柄,您可以使用该句柄在执行器上访问它。例如:

settings_bc = sc.broadcast({
   'num_of_donkeys': 3,
   'donkey_color': 'brown'
})

def simulate(settings, n):
    # do magic
    return n

no_parallel_instances = sc.parallelize(xrange(500))
res = no_parallel_instances.map(lambda row: simulate(settings_bc.value, row))
print res.collect()