在spark中创建一个多维随机矩阵
create a multidimensional random matrix in 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 创建包含多个维度的随机 matrices/RDD?
自从提出这个问题后,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]))
借助 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 创建包含多个维度的随机 matrices/RDD?
自从提出这个问题后,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]))