使用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?
答案 0 :(得分:0)
与此同时,您可以使用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]))