pysp中使用数据帧的矩阵乘法

2024-04-28 11:56:45 发布

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

我正在尝试使用pyspark编写一个代码,将两个大矩阵相乘。关于矩阵乘法有一个类似的线程,但使用RDD而不是数据帧:Matrix Multiplication in Apache Spark

我创建了两个随机整数矩阵。假设它们不是太大,这样运行起来就更快了。你知道吗

# Spark context and session
sc = SparkContext()
sqlc = SQLContext(sc)
spark_session = SparkSession(sc) 


def pysp_mat(rowN,colN):

    df = spark_session.createDataFrame(
    sc.parallelize([["row" + str(n)] + np.random.randint(1, 10, size=colN).tolist() for n in range(rowN)]), # Content
    ["row"] + ["col" + str(i) for i in range(colN)]) # Header
    df.show()

     return df

mat1 = pysp_mat(18,8)
mat2 = pysp_mat(8,1)

以下是数据帧:

+-----+----+----+----+----+----+----+----+----+
|  row|col0|col1|col2|col3|col4|col5|col6|col7|
+-----+----+----+----+----+----+----+----+----+
| row0|   2|   6|   7|   2|   9|   8|   1|   3|
| row1|   7|   5|   1|   2|   5|   1|   2|   3|
| row2|   4|   1|   9|   4|   4|   5|   6|   5|
| row3|   3|   9|   4|   8|   7|   6|   8|   2|
| row4|   9|   7|   9|   7|   2|   6|   4|   7|
| row5|   6|   3|   2|   5|   7|   4|   7|   5|
| row6|   2|   4|   9|   1|   8|   9|   9|   8|
| row7|   2|   1|   9|   6|   7|   6|   5|   3|
| row8|   6|   3|   2|   3|   9|   7|   4|   6|
| row9|   6|   9|   2|   4|   6|   2|   2|   6|
|row10|   5|   3|   7|   9|   4|   6|   6|   5|
|row11|   1|   2|   3|   6|   3|   2|   7|   1|
|row12|   3|   4|   8|   9|   8|   7|   8|   4|
|row13|   9|   4|   3|   4|   8|   8|   6|   5|
|row14|   3|   9|   5|   8|   9|   4|   5|   3|
|row15|   9|   8|   5|   9|   7|   5|   1|   4|
|row16|   8|   5|   6|   9|   4|   2|   1|   5|
|row17|   2|   6|   1|   8|   4|   1|   4|   1|
+-----+----+----+----+----+----+----+----+----+

+----+----+
| row|col0|
+----+----+
|row0|   5|
|row1|   7|
|row2|   9|
|row3|   1|
|row4|   3|
|row5|   4|
|row6|   4|
|row7|   3|
+----+----+

现在我想写一个执行矩阵乘法的函数?我应该尝试使用BlockMatrix吗?我看过@Corey的这个线程Matrix Multiplication A^T * A in PySpark,这是我问题的一个特例,但不完全是我要找的。你知道吗

谢谢!你知道吗


Tags: 数据indfsession矩阵线程matrixspark