如何使用pyspark VectorAssembler

问题描述 投票:0回答:2

我正在尝试使用pyspark的VectorAssembler函数,但它似乎无法正常工作。 我有一个 Twitter 数据的数据框,其中每个主题标签为一行,一年中的每一天为一列,并计算该主题标签在这一天被使用的次数。我想对其进行矢量化,我的代码是:

%%spark
from pyspark.ml.feature import VectorAssembler
assembler = VectorAssembler(inputCols = daily_hashtag_matrix.columns[1:], outputCol = "vector")
output = assembler.transform(daily_hashtag_matrix)
daily_vector = output.select( "vector")
daily_vector.show(n=15)

然而,输出并不符合预期,从某种意义上说,对于几行来说,它是我想要的向量,而对于大多数行来说不是,请参见下文:

+--------------------+
|              vector|
+--------------------+
|(356,[6,62,98,228...|
|(356,[4,10,11,12,...|
|(356,[12,117,209,...|
|(356,[186,187],[1...|
|    (356,[79],[1.0])|
|(356,[152,168],[1...|
|(356,[1,15,25,29,...|
|(356,[3,4,5,9,11,...|
|(356,[38,57,184,2...|
|(356,[3,6,9,17,35...|
|(356,[18,31,49,90...|
|   (356,[351],[1.0])|
|[3.0,1.0,0.0,0.0,...|
|(356,[102,103],[4...|
|(356,[6,110,206],...|
+--------------------+

我希望将所有行作为输出中的第 13 行。我做错了什么? 预先感谢

python apache-spark pyspark
2个回答
1
投票

您在第 13 行看到的称为

DenseVector
,而其余的称为
SparseVector
,其中该行的大部分值都是零。看看下面的示例

from pyspark.ml.feature import VectorAssembler

df = spark.createDataFrame([
    (1, 0, 3),
    (0, 0, 0),
], ["a", "b", "c"])
vecAssembler = VectorAssembler(outputCol="features")
vecAssembler.setInputCols(["a", "b", "c"])
vecAssembler.transform(df).collect()

[Row(a=1, b=0, c=3, features=DenseVector([1.0, 0.0, 3.0])),
 Row(a=0, b=0, c=0, features=SparseVector(3, {}))]

0
投票

当我在 jupyter 实验室中执行以下操作时,出现此错误:

从 pyspark.ml.feature 导入 VectorAssembler

错误: ModuleNotFoundError Traceback(最近一次调用最后一次) 第 1 行 [5] 中的单元格 ----> 1 从 pyspark.ml.feature 导入 VectorAssembler

谁能告诉我如何修复吗?

© www.soinside.com 2019 - 2024. All rights reserved.