【发布时间】:2019-08-10 02:08:48
【问题描述】:
我想获取 CountVectorizer 转换的文档对的差异。换句话说,取两列稀疏向量之间的差异。我将相同的转换器应用于 df[doc1] 和 df[doc2],因此结果向量对 (df['X1'] - df['X2']) 的维度将始终保持一致。
from pyspark.ml.feature import RegexTokenizer, CountVectorizer
from pyspark.ml import Pipeline
from pyspark.sql.functions import col
df = spark.createDataFrame([("homer likes donuts".split(" "), "donuts taste delicious".split(" "), 0),
("five by five boss".split(" "), "five is a number".split(" "), 1)],
["words1", "words2", "label"])
display(df)
cv = CountVectorizer()
union_words = df.select(col('words1').alias('words')).union(df.select(col('words2').alias('words')))
cv = CountVectorizer() \
.setInputCol('words') \
.fit(union_words)
df = cv.setInputCol('words1') \
.setOutputCol('X1') \
.transform(df)
df = cv.setInputCol('words2') \
.setOutputCol('X2') \
.transform(df)
display( df )
X1 X2
[0,11,[1,2,9],[1,1,1]] [0,11,[1,4,8],[1,1,1]]
[0,11,[0,3,10],[2,1,1]] [0,11,[0,5,6,7],[1,1,1,1]]
我无法添加列(列类型不匹配,需要数字或日历间隔)。我尝试了@zero323 的add function,但在 isinstance(v1, SparseVector) 处遇到断言错误
df.withColumn("result", (col("X1") + col("X2"))
df.withColumn("result", add(col("X1"), col("X2"))
在稀疏向量格式中,我希望结果是:
[0,11,[2,4,8,9],[1,-1,-1,1]]
[0,11,[0,3,5,6,7,10],[1,1,-1,-1,-1,1]]
【问题讨论】:
标签: python pyspark apache-spark-mllib countvectorizer