Pyspark CountVectorizerModel-更改inputCol名称

时间:2018-09-27 05:31:42

标签: python machine-learning pyspark apache-spark-sql

一些背景:

如标题中所述,我想在python中编写一个类,该类将包装pyspark的TFIDF实现。 这个班有:

  • 构造函数,它接受数据帧和inpuCol,然后根据给定数据帧的inputCol中的标记初始化CountVectorizerModel和IDFModel。

  • transform方法,该方法接受一个dataframe,inputCol和outputCol,并返回一个带有new列(具有给定outputCol名称)和tfidf向量的数据帧,该数据帧基于inputCol和构造函数中学习的(拟合的)模型。

我的问题:

为了实现我的目标并支持使用不同的列名转换任意数据框,我必须更改已安装的CountVectorizerModel的inputCol名称和已安装的IDFModel的outputCol。 但是,我无法在Spark 2.0.0上做到这一点:

class TFIDFVectorizer(object):

    def __init__(self, df, inputCol, useHash=False, hashSize=None):

        # init tf model
        cv = CountVectorizer(inputCol=inputCol, outputCol="rawFeatures")
        self._tfModel = cv.fit(df)

        # init idf model
        featurizedData = self._tfModel.transform(df)
        idf = IDF(inputCol="rawFeatures", outputCol="features")
        self._idfModel = idf.fit(featurizedData)

    def transform(self, df, inputCol, outputCol):
        # apply TF
        tfData = self._tfModel.transform(df, params={self._tfModel.inputCol : inputCol})

        # aplly IDF
        tfidfData = self._idfModel.transform(tfData, params={self._idfModel.outputCol : outputCol})

        tfidfData = tfidfData.drop("rawFeatures")
        return tfidfData

我得到一个例外:CountVectorizerModel has no attribute 'inputCol'. 在以后的Spark版本中,它可以完美运行,您知道为什么吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您没有在引号中输入inputCol。通过'inputCol'更改inputCol