pyspark - 使用 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)
解决方案
在这行代码中,您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 输入中使用目标标签。这是不正确的。
推荐阅读
- sql - 带条件的 Oracle SQL 合并语句
- java - 如何在itext 7中将html转换为pdf时仅获得某些页面的横向?
- c - 在乘以 uint64 * uint64 时获取 uint64 超过其限制的次数
- angular - Angular Mat 对话框单元测试:This.dialogref.updatesize 不是函数
- ios - iOS 13 页面上的圆角
- python - ModuleNotFoundError:没有名为“_sysconfigdata_m_darwin_darwin”的模块
- perforce - 在与取消搁置存在冲突后,perforce 是否会安排解决?
- r - 在R中对具有指定逻辑的列进行分组
- reactjs - 尝试使用 react-redux 调度操作时,“PropsWithChildren”类型上不存在 Prop
- python - 用户输入表单字段后如何运行python函数