首页 > 解决方案 > 使用 GradientBoostingClassifier 时出现数据框错误

问题描述

运行代码时出现此错误:TypeError:无法识别类型为 <class 'pyspark.sql.dataframe.DataFrame'> 的管道阶段,特别是当我将管道适合我的数据时。我想我可能错误地加载了我的 csv 但不确定,这是我的代码:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

import pyspark.sql.functions as F
import numpy as np
from pyspark.ml import Pipeline,PipelineModel
from pyspark.ml.classification import GBTClassifier
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.feature import StringIndexer,OneHotEncoderEstimator

from pyspark.sql.types import DoubleType

df = spark.read.format("csv").option("header", "true").load("FileStore/tables/data.csv")


str_indxr = StringIndexer(inputCol="PointDiff", outputCol="label")
str_indxr = str_indxr.fit(df).transform(df)

str_indxr.columns
vec_assmblr = VectorAssembler(inputCols=['label','col1', 'col2', 'col3'], outputCol='features_norm')
splits =df.randomSplit([0.8, 0.2])
df_train = splits[0]
df_test = splits[1]
gbt = GBTClassifier(labelCol="label", featuresCol="features_norm", maxIter=10)
pip_line = Pipeline(stages=[str_indxr,vec_assmblr,gbt])
pip_line_fit = pip_line.fit(df_train)

df_tran = pip_line_fit.transform(df_test)

标签: pysparkmodeldatabricks

解决方案


在这行代码中,您str_indxr = str_indxr.fit(df).transform(df)已经将字符串索引器阶段转换为数据框。所以当你在这一行中使用它时,pip_line = Pipeline(stages=[str_indxr,vec_assmblr,gbt])str_indxr 现在是一个数据框,而不是一个字符串索引器阶段。

因此,要么跳过该步骤,要么将输出分配给str_indxr = str_indxr.fit(df).transform(df)不同的名称。

另一个提示 - 您也在 VectorAssembler 输入中使用目标标签。这是不正确的。


推荐阅读