那是因爲你正試圖從兩個不同的庫混合功能:LinearRegressionWithSGD
來自pyspark.mllib
(即舊的,RDD-based API),同時兼具LinearRegression
& ParamGridBuilder
來自pyspark.ml
(新,dataframe-based API)。
事實上,在你引用(順便說一句,在未來這將是很好提供一個鏈接,太),你會發現行documentation的代碼片段之前的幾行:
from pyspark.ml.regression import LinearRegression
而LinearRegressionWithSGD
您使用something like:
from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD, LinearRegressionModel
這兩個庫是不兼容:pyspark.mllib
將RDD的LabeledPoint
作爲輸入,這與pyspark.ml
中使用的數據幀不兼容;並且由於ParamGridBuilder
是後者的一部分,因此它只能與數據幀一起使用,而不能與pyspark.mllib
中包含的算法一起使用(請檢查上面提供的文檔鏈接)。
而且,記住,LinearRegressionWithSGD
是Spark 2 deprecated:
注意:在2.0.0棄用。使用ml.classification.LogisticRegression或LogisticRegressionWithLBFGS。
UPDATE:感謝以下@ rvisio的評論,我們現在知道,雖然undocumented,一個可實際使用pyspark.ml
爲solver='sgd'
LinearRegression
;這裏是一個簡短的例子adapted from the docs:
spark.version
# u'2.2.0'
from pyspark.ml.linalg import Vectors
from pyspark.ml.regression import LinearRegression
df = spark.createDataFrame([
(1.0, 2.0, Vectors.dense(1.0)),
(0.0, 2.0, Vectors.sparse(1, [], []))], ["label", "weight", "features"])
lr = LinearRegression(maxIter=5, regParam=0.0, solver="sgd", weightCol="weight") # solver='sgd'
model = lr.fit(df) # works OK
lr.getSolver()
# 'sgd'
對此答案有幫助嗎?如果是的話,請接受它 - 謝謝 – desertnaut