如何使用pyspark制作大小为n * k的空矩阵?

Posted

技术标签:

【中文标题】如何使用pyspark制作大小为n * k的空矩阵?【英文标题】:How to make null matrix of size n*k using pyspark? 【发布时间】:2019-10-09 13:30:25 【问题描述】:

如果在 pyspark 中制作 n*n 矩阵以进行某些计算,我们有一个要求。使用 pyspark 可能我们尝试如下:

similarity_matrix = np.zeros(shape=(data1.count(),data1.count()))

similarity_matrix = spark.createDataFrame(similarity_matrix)

这里的数据是我们的 80K 长度的数据帧。有什么方法可以在 pyspark 中执行此操作,因为我们在执行此操作时遇到内存错误

【问题讨论】:

我相信您会发现 ML 库。一个我从pyspark.mllib.linalg import DenseMatrix google ...DenseMatrix(2,2,range(4)) 请发布错误信息。目前,您的方法行不通,因为您无法从这样的 numpy 数组创建数据框。这会导致以下错误:TypeError: Can not infer schema for type: <class 'numpy.ndarray'>。也许你想看看this。 我看到以下错误:Exception: Traceback (most recent call last): File "/tmp/zeppelin_pyspark-4172965528199358051.py", line 326, in <module> exec(code) File "<stdin>", line 1, in <module> MemoryError 【参考方案1】:
size = 80000
schema = StructType([StructField(str(i), IntegerType(), True) for i in range(size)])
rdd = ss.range(size).rdd.map(lambda x: np.zeros(size))
df = ss.createDataFrame(rdd, schema)

或者在scala中

scala> val df = spark.range(80000).map(s=>new Array[Int](80000))
df: org.apache.spark.sql.Dataset[Array[Int]] = [value: array<int>]

scala> df.first.size
res35: Int = 80000

scala> df.count
res36: Long = 80000

【讨论】:

我猜 Pyspark 一个不起作用,因为它将是正确的数字数组

以上是关于如何使用pyspark制作大小为n * k的空矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark 中处理 Glue 数据目录中的空表

CF457DBingo!(数学 期望)

卡尔曼滤波

[BZOJ 2738]矩阵乘法

最大尺寸的方形子矩阵

关于strassen矩阵乘法的矩阵大小不是2^k的形式时,时间复杂度是否还是比朴素算法好的看法