在spark中创建一个多维随机矩阵

时间:2015-03-25 15:50:31

标签: python numpy multidimensional-array apache-spark

使用Spark的python API,我能够快速创建一个具有随机正常数的RDD向量,并使用以下代码执行计算:

from pyspark.mllib.random import RandomRDDs
RandomRDDs.uniformRDD(sc, 1000000L, 10).sum()

其中sc是可用的SparkContext。这种方法的好处在于它非常高效,缺点是我无法以这种方式创建随机矩阵。

您可以再次创建使用numpy,但这不具备效果。

%%time
sc.parallelize(np.random.rand(1000000,2)).sum()
array([ 499967.0714618 ,  499676.50123474])
CPU times: user 52.7 ms, sys: 31.1 ms, total: 83.9 ms
Wall time: 669 ms

与Spark比较:

%%time
RandomRDDs.uniformRDD(sc, 2000000, 10).sum()
999805.091403467
CPU times: user 4.54 ms, sys: 1.89 ms, total: 6.43 ms
Wall time: 183 ms

是否有一种高效的方法可以使用Python Spark API创建包含多个维度的随机矩阵/ RDD?

1 个答案:

答案 0 :(得分:0)

自从提出这个问题后,Spark发展了一点,Spark将来可能会有更好的支持。

与此同时,您可以使用RDD的.zip方法和DataFrames来创造一些,以接近numpy可以做的事情。它有点冗长,但它有效。

n = 100000
p1 = RandomRDDs.uniformRDD(sc, n).zip(RandomRDDs.uniformRDD(sc, n))
p2 = RandomRDDs.uniformRDD(sc, n).zip(RandomRDDs.uniformRDD(sc, n))

point_rdd = p1.zip(p2)\
.map(lambda r: Row(x1=r[0][0], y1 = r[0][1], x2=r[1][0], y2 = r[1][1]))