我正在应用一个频繁的模式分析,需要一些输入类型的帮助。在
首先,我使用stringindexer将分类变量转换为数字。在
然后,我为每个分类值创建一个唯一的数字,如下所示:
add_100=udf(lambda x:x+100,returnType=FloatType())
add_1000=udf(lambda x:x+1000,returnType=FloatType())
df = df.select('cat_var_1', add_1000('cat_var_2').alias('cat_var_2_final'), add_10000('cat_var_3').alias('cat_var_3_final'))
我的下一步是创建一个具有以下特征的向量:
^{pr2}$最后,我尝试适合我的模型:
from pyspark.ml.fpm import FPGrowth
fpGrowth = FPGrowth(itemsCol="features", minSupport=0.5, minConfidence=0.6)
model = fpGrowth.fit(df)
得到这个错误:
u'requirement failed: The input column must be ArrayType, but got org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7.
所以,问题是,如何将向量转换成数组?或者,我还有别的办法解决这个问题吗?在
我想,你不需要自定义项来创建独一无二的号码。或者您可以直接使用with column,例如
另外,如果您只对FPGrowth模型使用这些数据,我们也可以跳过向量汇编程序,直接使用udf as创建数组特性
^{pr2}$FPGrowth使用数组而不是向量。由于
VectorAssembler
将给您一个矢量作为输出,一个可能的简单解决方案是使用UDF
将输出转换为数组。在更好的解决方案是一次完成所有操作,即根本不使用
^{pr2}$VectorAssembler
。这样做的好处是根本不需要UDF
,因此速度更快。这将使用pyspark中内置的array
函数。在相关问题 更多 >
编程相关推荐