我正在尝试使用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,这是我问题的一个特例,但不完全是我要找的。你知道吗
谢谢!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐