pysp中稠密矩阵的重划分

2024-04-18 13:46:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pyspark中有一个稠密矩阵(100*100),我想把它分成十组,每组包含10行。在

from pyspark import SparkContext, SparkConf
from pyspark.mllib import *
sc = SparkContext("local", "Simple App")
dm2 = Matrices.dense(100, 100, RandomRDDs.uniformRDD(sc, 10000).collect())
newRdd = sc.parallelize(dm2.toArray())
rerdd = newRdd.repartition(10)

上面的代码导致rerdd包含100个元素。我想把这个矩阵dm2表示为按行分区的块(例如,一个分区中有10行)。在


Tags: fromimportapplocal矩阵simplepyspark分区
1条回答
网友
1楼 · 发布于 2024-04-18 13:46:38

我说不出什么道理,但你可以这样做

mat =  Matrices.dense(100, 100, np.arange(10000))

n_par = 10
n_row = 100

rdd = (sc
    .parallelize(
        # Add indices
        enumerate(
            # Extract and reshape values
            mat.values.reshape(n_row, -1)))
    # Partition and sort by row index
    .repartitionAndSortWithinPartitions(n_par, lambda i: i // n_par))

检查每个分区的分区数和行数:

^{pr2}$

检查第一行是否包含所需数据:

assert np.all(rdd.first()[1] == np.arange(100))

相关问题 更多 >