python虚拟环境可以运行pyspark_python-如何在一个sparkContext中从pyspark中的单独线程运行多个作业?...

今天,我也这么问我。多处理模块提供了一个线程池,它为您生成一些线程,从而并行运行作业。首先实例化函数,然后创建池,然后在要迭代的范围内 map它。

在我的例子中,我计算了不同中心数的WSSSE数(超参数调整),以得到一个“好的”k均值聚类…就像MLSPARK文档中概述的那样。无需进一步 explain,以下是我的IPython job表中的一些单元格:

from pyspark.mllib.clustering import KMeans

import numpy as np

C_点是12维阵列:

>>> c_points.cache()

>>> c_points.take(3)

[array([ 1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]),

array([-2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]),

array([ 7, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])]

在下面的内容中,对于每一个我正在计算这个wssse值并将其作为元组返回:

def error(point, clusters):

center = clusters.centers[clusters.predict(point)]

return np.linalg.norm(point - center)

def calc_wssse(i):

clusters = KMeans.train(c_points, i, maxIterations=20,

runs=20, initializationMode="random")

WSSSE = c_points

.map(lambda point: error(point, clusters))

.reduce(lambda x, y: x + y)

return (i, WSSSE)

以下是有趣的部分:

from multiprocessing.pool import ThreadPool

tpool = ThreadPool(processes=4)

运行它:

wssse_points = tpool.map(calc_wssse, range(1, 30))

wssse_points

给予:

[(1, 195318509740785.66),

(2, 77539612257334.33),

(3, 78254073754531.1),

...

]

你可能感兴趣的:(python虚拟环境可以运行pyspark_python-如何在一个sparkContext中从pyspark中的单独线程运行多个作业?...)