我试图在python脚本上使用PySpark API从spark应用程序执行pca。我这样做:
pca = PCA(k=3, inputCol="features", outputCol="pcaFeatures")
PCAmodel = pca.fit(data)
当我在pyspark shell中运行这两个代码行时,它工作并返回好的结果,但在应用程序脚本中,我得到了错误类型:
PCA()得到了一个意想不到的关键字参数' k'
PS:在这两种情况下我都使用Spark 2.2.0
问题在哪里?为什么它在PySpark shell中工作而不适用于应用程序?答案 0 :(得分:3)
您可能在一个案例中从ml
导入:
from pyspark.ml.feature import PCA
和mllib
在另一个:
from pyspark.mllib.feature import PCA
答案 1 :(得分:1)
在您的应用程序脚本中从PySpark导入之后,您确定还没有从PCA
导入scikit-learn
,
spark.version
# u'2.2.0'
from pyspark.ml.feature import PCA
from sklearn.decomposition import PCA
# PySpark syntax with scikit-learn PCA function
pca = PCA(k=3, inputCol="features", outputCol="pcaFeatures")
# Error:
TypeError: __init__() got an unexpected keyword argument 'k'
撤销导入顺序不会产生错误(未显示)。
答案 2 :(得分:1)
尝试重命名您的课程:
from pyspark.ml.feature import PCA as PCAML
from sklearn.decomposition import PCA as PCASK
pca_ml = PCAML(k=3, inputCol="features", outputCol="pcaFeatures")
那么,你应该称之为混淆。