RDD转多维数组
RDD to multidimensional array
我正在使用 spark 的 python API,我发现一些矩阵运算具有挑战性。我的 RDD 是长度为 n(行向量)的一维列表。是否可以将其重塑为大小为 sq_root(n) x Sq_root(n).
的 matrix/multidimensional 数组
例如,
Vec=[1,2,3,4,5,6,7,8,9]
和所需的输出 3 x 3=
[[1,2,3]
[4,5,6]
[7,8,9]]
在 numpy 中是否有等同于 reshape 的东西?
条件:
n(>5000 万)很大,因此排除了使用 .collect() 的可能性,
这个过程可以在多个线程上进行 运行 吗?
像这样的东西应该可以解决问题:
rdd = sc.parallelize(xrange(1, 10))
nrow = int(rdd.count() ** 0.5) # Compute number of rows
rows = (rdd.
zipWithIndex(). # Add index, we assume that data is sorted
groupBy(lambda (x, i): i / nrow). # Group by row
# Order by column and drop index
mapValues(lambda vals: [x for (x, i) in sorted(vals, key=lambda (x, i): i)])))
您可以添加:
from pyspark.mllib.linalg import DenseVector
rows.mapValues(DenseVector)
如果你想要合适的载体。
我正在使用 spark 的 python API,我发现一些矩阵运算具有挑战性。我的 RDD 是长度为 n(行向量)的一维列表。是否可以将其重塑为大小为 sq_root(n) x Sq_root(n).
的 matrix/multidimensional 数组例如,
Vec=[1,2,3,4,5,6,7,8,9]
和所需的输出 3 x 3=
[[1,2,3]
[4,5,6]
[7,8,9]]
在 numpy 中是否有等同于 reshape 的东西?
条件: n(>5000 万)很大,因此排除了使用 .collect() 的可能性, 这个过程可以在多个线程上进行 运行 吗?
像这样的东西应该可以解决问题:
rdd = sc.parallelize(xrange(1, 10))
nrow = int(rdd.count() ** 0.5) # Compute number of rows
rows = (rdd.
zipWithIndex(). # Add index, we assume that data is sorted
groupBy(lambda (x, i): i / nrow). # Group by row
# Order by column and drop index
mapValues(lambda vals: [x for (x, i) in sorted(vals, key=lambda (x, i): i)])))
您可以添加:
from pyspark.mllib.linalg import DenseVector
rows.mapValues(DenseVector)
如果你想要合适的载体。