如何将两列向量转换为一个PySpark数据帧?

时间:2017-04-19 18:43:14

标签: python apache-spark pyspark sparse-matrix

在Pyspark数据帧上运行PolynomialExpansion后,我有一个如下所示的数据框(polyDF):

+--------------------+--------------------+
|            features|        polyFeatures|
+--------------------+--------------------+
|(81,[2,9,26],[13....|(3402,[5,8,54,57,...|
|(81,[4,16,20,27,3...|(3402,[14,19,152,...|
|(81,[4,27],[1.0,1...|(3402,[14,19,405,...|
|(81,[4,27],[1.0,1...|(3402,[14,19,405,...|

“功能”列包含原始数据中包含的功能。每行代表不同的用户。原始数据中的每个用户总共有81个可能的功能。 “polyFeatures”列包括运行多项式展开后的特征。运行PolynomialExpansion后,有3402个可能的polyFeature。那么两列的每一行包含的是:

  1. 表示可能功能数量的整数(每个用户可能在每个功能中都有或没有值)。
  2. 包含该用户具有值的功能索引的整数列表。
  3. 包含上述#2中提到的每个功能的值的数字列表。
  4. 我的问题是,如何创建这两个列,创建两个稀疏矩阵,然后将它们连接在一起以获得一个完整的稀疏Pyspark矩阵?理想情况下它看起来像这样:

    +---+----+----+----+------+----+----+----+----+---+---
    | 1 | 2  | 3  | 4  |  ... |405 |406 |407 |408 |409|...
    +---+----+----+----+------+----+----+----+----+---+---
    | 0 | 13 | 0  | 0  | ...  | 0  | 0  | 0  | 6  | 0 |...
    | 0 | 0  | 0  | 9  | ...  | 0  | 0  | 0  | 0  | 0 |...
    | 0 | 0  | 0  | 1.0| ...  | 3  | 0  | 0  | 0  | 0 |...
    | 0 | 0  | 0  | 1.0| ...  | 3  | 0  | 0  | 0  | 0 |...
    

    我已经查看了位于here的PolynomialExpansion的Spark文档,但它没有涵盖此特定问题。我还尝试应用记录为here的SparseVector类,但这似乎只对一个向量而不是向量的数据帧有用。

    有没有有效的方法来实现这一目标?

0 个答案:

没有答案