首页 文章

如何在pypark 2.2.0中用向量元素乘以矩阵行

提问于
浏览
-1

我试图使用pyspark 2.2.0将每个矩阵行乘以给定向量中的相应元素 .

例如 numpy 我可以这样做:

foo = np.array([[1,2,3], [4,5,6]])
bar = np.array([[2],[3]])
bar * foo

结果是:

array([[ 2,  4,  6],
       [12, 15, 18]])

请注意,我不想做点积 . 它只是将矩阵行中的每个元素乘以向量中的对应元素 .

在pyspark 2.2.0中有没有办法做到这一点?我尝试了很多东西,却无法得到我想要的东西 . 我猜一个人可以用 map 这样做,但不知何故感觉不对 .

有更好的方法吗?

1 回答

  • 2

    例如,您可以逐行连接两个数据帧,然后使用 UDFArrayType 的每个元素乘以 IntegerType

    首先让我们用行索引创建数据帧:

    foo_df = sc.parallelize(foo.tolist()).zipWithIndex().toDF()
    bar_df = sc.parallelize(bar.tolist()).zipWithIndex().toDF()
    

    现在加入他们并获得最终结果:

    import pyspark.sql.functions as psf
    from pyspark.sql.types import ArrayType, IntegerType
    mul = psf.udf(lambda xx,y: [x * y for x in xx], ArrayType(IntegerType()))
    foo_df.join(bar_df, '_2')\
        .select(mul(foo_df._1, bar_df._1[0]))\
        .show()
    
        +-------------------+
        |<lambda>(_1, _1[0])|
        +-------------------+
        |          [2, 4, 6]|
        |       [12, 15, 18]|
        +-------------------+
    

相关问题