pyspark.sql.utils.IllegalArgumentException:u'字段“功能”不存在。'

2023-12-06

我正在尝试执行随机森林分类器并使用交叉验证评估模型。我使用 pySpark 工作。输入 CSV 文件以 Spark DataFrame 格式加载。 但我在构建模型时遇到了一个问题。

下面是代码。

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.ml import Pipeline
from pyspark.ml.classification import RandomForestClassifier
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.mllib.evaluation import BinaryClassificationMetrics
sc = SparkContext()
sqlContext = SQLContext(sc)
trainingData =(sqlContext.read
         .format("com.databricks.spark.csv")
         .option("header", "true")
         .option("inferSchema", "true")
         .load("/PATH/CSVFile"))
numFolds = 10 
rf = RandomForestClassifier(numTrees=100, maxDepth=5, maxBins=5, labelCol="V5409",featuresCol="features",seed=42)
evaluator = MulticlassClassificationEvaluator().setLabelCol("V5409").setPredictionCol("prediction").setMetricName("accuracy")
paramGrid = ParamGridBuilder().build()

pipeline = Pipeline(stages=[rf])
paramGrid=ParamGridBuilder().build()
crossval = CrossValidator(
    estimator=pipeline,
    estimatorParamMaps=paramGrid,
    evaluator=evaluator,
    numFolds=numFolds)
model = crossval.fit(trainingData)
print accuracy

我遇到以下错误

Traceback (most recent call last):
  File "SparkDF.py", line 41, in <module>
    model = crossval.fit(trainingData)
  File "/usr/local/spark-2.1.1/python/pyspark/ml/base.py", line 64, in fit
    return self._fit(dataset)
  File "/usr/local/spark-2.1.1/python/pyspark/ml/tuning.py", line 236, in _fit
    model = est.fit(train, epm[j])
  File "/usr/local/spark-2.1.1/python/pyspark/ml/base.py", line 64, in fit
    return self._fit(dataset)
  File "/usr/local/spark-2.1.1/python/pyspark/ml/pipeline.py", line 108, in _fit
    model = stage.fit(dataset)
  File "/usr/local/spark-2.1.1/python/pyspark/ml/base.py", line 64, in fit
    return self._fit(dataset)
  File "/usr/local/spark-2.1.1/python/pyspark/ml/wrapper.py", line 236, in _fit
    java_model = self._fit_java(dataset)
  File "/usr/local/spark-2.1.1/python/pyspark/ml/wrapper.py", line 233, in _fit_java
    return self._java_obj.fit(dataset._jdf)
  File "/home/hadoopuser/anaconda2/lib/python2.7/site-packages/py4j/java_gateway.py", line 1160, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/usr/local/spark-2.1.1/python/pyspark/sql/utils.py", line 79, in deco
    raise IllegalArgumentException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.IllegalArgumentException: u'Field "features" does not exist.'
hadoopuser@rackserver-PowerEdge-R220:~/workspace/RandomForest_CV$ 

请帮我解决 pySpark 中的这个问题。 谢谢。

我在这里展示数据集的详细信息。 不,我没有专门的功能栏。下面是 TrainingData.take(5) 的输出,它显示数据集的前 5 行。

[行(V4366=0.0、V4460=0.232、V4916=-0.017、V1495=-0.104、V1639=0.005、V1967=-0.008、V3049=0.177、V3746=-0.675、V3869=-3.451、V524=0。 004、V5409= 0)、行(V4366=0.0、V4460=0.111、V4916=-0.003、V1495=-0.137、V1639=0.001、V1967=-0.01、V3049=0.01、V3746=-0.867、V3869=-2.759、V524=0。 0, V5409=0)、行(V4366=0.0、V4460=-0.391、V4916=-0.003、V1495=-0.155、V1639=-0.006、V1967=-0.019、V3049=-0.706、V3746=0.166、V3869=0.189 , V524 =0.001,V5409=0),行(V4366=0.0,V4460=0.098,V4916=-0.012,V1495=-0.108,V1639=0.005,V1967=-0.002,V3049=0.033,V3746=-0.787,V3869= -0.926 , V524=0.002, V5409=0), 行(V4366=0.0, V4460=0.026, V4916=-0.004, V1495=-0.139, V1639=0.003, V1967=-0.006, V3049=-0.045, V3746=-0.208 , V3869 =-0.782,V524=0.001,V5409=0)]

其中 V433 到 V524 是功能。 V5409 是类别标签。


Spark 数据帧的使用方式与 Spark ML 不同;你所有的特征都需要是向量single列,通常命名为features。以下是使用您提供的 5 行作为示例的方法:

spark.version
# u'2.2.0'

from pyspark.sql import Row
from pyspark.ml.linalg import Vectors

# your sample data:
temp_df = spark.createDataFrame([Row(V4366=0.0, V4460=0.232, V4916=-0.017, V1495=-0.104, V1639=0.005, V1967=-0.008, V3049=0.177, V3746=-0.675, V3869=-3.451, V524=0.004, V5409=0), Row(V4366=0.0, V4460=0.111, V4916=-0.003, V1495=-0.137, V1639=0.001, V1967=-0.01, V3049=0.01, V3746=-0.867, V3869=-2.759, V524=0.0, V5409=0), Row(V4366=0.0, V4460=-0.391, V4916=-0.003, V1495=-0.155, V1639=-0.006, V1967=-0.019, V3049=-0.706, V3746=0.166, V3869=0.189, V524=0.001, V5409=0), Row(V4366=0.0, V4460=0.098, V4916=-0.012, V1495=-0.108, V1639=0.005, V1967=-0.002, V3049=0.033, V3746=-0.787, V3869=-0.926, V524=0.002, V5409=0), Row(V4366=0.0, V4460=0.026, V4916=-0.004, V1495=-0.139, V1639=0.003, V1967=-0.006, V3049=-0.045, V3746=-0.208, V3869=-0.782, V524=0.001, V5409=0)])

trainingData=temp_df.rdd.map(lambda x:(Vectors.dense(x[0:-1]), x[-1])).toDF(["features", "label"])
trainingData.show()
# +--------------------+-----+ 
# |            features|label|
# +--------------------+-----+
# |[-0.104,0.005,-0....|    0| 
# |[-0.137,0.001,-0....|    0|
# |[-0.155,-0.006,-0...|    0|
# |[-0.108,0.005,-0....|    0|
# |[-0.139,0.003,-0....|    0|
# +--------------------+-----+

之后,您的管道应该运行良好(我假设您确实有多类分类,因为您的样本仅包含 0 作为标签),只需更改您的标签列rf and evaluator如下:

rf = RandomForestClassifier(numTrees=100, maxDepth=5, maxBins=5, labelCol="label",featuresCol="features",seed=42)
evaluator = MulticlassClassificationEvaluator().setLabelCol("label").setPredictionCol("prediction").setMetricName("accuracy")

最后,print accuracy行不通 - 你需要model.avgMetrics反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyspark.sql.utils.IllegalArgumentException:u'字段“功能”不存在。' 的相关文章

随机推荐

  • Dynamodb 按排序顺序扫描

    你好 我有一个 dynamodb 表 我希望该服务返回该表中的所有项目 并且顺序是按一个属性排序 我需要为此创建一个全局二级索引吗 如果是这样的话 哈希键应该是什么 范围键是什么 请注意 对 gsi 的查询必须在 GSI 的哈希键上指定 E
  • 使一类特定的视图控制器在选项卡栏应用程序中自动旋转,但强制所有其他类的视图控制器保持纵向

    我有一个带有此代码的选项卡栏控制器 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation Return YES for
  • 在地图 d3 javascript 中绘制点

    我想在我使用图像的地图上基于名为 tree csv 的 csv 文件中的经度和纬度在地图上绘制 我的 csv 文件包含很多行 所以我只在这里放一些行 经度和纬度 37 7295482207565 122 392689419827 37 80
  • kubernetes 的 nginx-ingress 中最多可以创建多少个 ingress 对象

    我们有一个多租户应用程序 并且为每个租户提供单独的容器映像 同样 我们为每个租户创建一个子域 该子域将被重定向到其自己的容器 可能存在一种场景 其中可以存在数千个租户及其动态 因此 我们在选择之前有必要考虑 Kubernetes 入口控制器
  • 流口水性能测试

    目前 我们正在寻求在系统中使用 drools 来管理知识密集型流程 据我所知 有关流口水的性能测试的信息和结果很少且很难找到 虽然用例差异很大 但最好了解常见的瓶颈 例如 插入就是其中之一 以及在某些场景下绕过这些瓶颈的可能的最佳实践 此外
  • Pandas 中的左内连接[重复]

    这个问题在这里已经有答案了 我正在学习 Python 2 7 并尝试左连接两个 pandas 数据帧 一个数据框具有日期和相应的产品销售情况 而另一个数据框具有日期和相应的星期几 print type weekdaytrain print
  • 比较 R 中的矩阵求逆 - Cholesky 方法有什么问题?

    我比较了计算对称矩阵的逆的各种方法 解决 来自 LAPACK 包 解决 但使用更高的机器精度 qr solve 据说更快 ginv MASS 包 Moore Penrose 算法的实现 chol2inv 使用 Cholesky 分解 通过特
  • 如何设置:标签的“艺术家”、“专辑艺术家”、“年份”、“专辑”、“歌曲编号”和“标题”字段,带诱变剂

    我正在尝试使用 mutagen 使用 Python 2 7 5 创建一个程序 假设歌曲的路径是 Artist Year Album Songnumber Title mp3 设置歌曲的艺术家 专辑艺术家 年份 专辑 歌曲编号和标题标签 并保
  • 如何使用 Selenium WebDriver 选择新的 IFrame?

    我想选择一个Iframe并在 Body 中输入值 我正在尝试使用下面的代码 HTML 代码 div br div 硒代码 driver switchTo frame driver findElement By xpath iframe co
  • Symfony2 作曲家安装

    我正在尝试安装 Symfony 2 1 3 最新 我正在运行作曲家并安装一切正常 这only我得到的错误是 Script Sensio Bundle DistributionBundle Composer ScriptHandler cle
  • pow 函数的奇怪行为

    运行以下代码行时 int i a for i 0 i lt 4 i a pow 10 i printf d t a 我很惊讶地看到输出 结果是1 10 99 1000 9999代替1 10 100 1000 10000 可能的原因是什么 N
  • 在页面加载之前在 JavaFX WebView 中注入桥接代码?

    我想在 JavaFX WebView 中加载一些内容或页面 并向 Java 提供一个 Bridge 对象 以便页面的内容可以调用 java 这里描述了如何执行此操作的基本概念 https blogs oracle com javafx en
  • 使用powershell编译并运行java应用程序

    我正在尝试编译一个示例 Helloworld java 文件 我的 jdk 安装在 C Program Files jdk1 7 bin 中 我的 Helloworld java 位于 C Helloworld java 中 其实我对pow
  • 从sql文件执行sql查询

    我想将数据库 shop 中的所有表包含到 mydatabasenewshop 我导出 shop 数据库 现在它被命名为shop sql 有什么方法可以从该文件执行整个查询 而不是直接导入数据库newshop 我想你需要的可能是 mysql
  • 如何在 PowerShell 中的函数结束时返回到用户菜单

    我正在编写一个 PowerShell 脚本 为用户提供许多可供选择的选项 一旦选择了一个选项 就会执行一个功能 并且用户将返回到原始菜单 在下面的代码中 为用户提供了选项 并执行了函数 但完成后 脚本就结束了 我想要的是在函数结束时返回到原
  • 如何在 Windows 10 中禁用 Winscard Discovery?

    我正在使用 ACR122U 测试智能卡 但是 当我将卡放在上面时 Windows 会自动向其发送 APDU 命令 根据问题Windows 8 禁用智能卡即插即用 我禁用了智能卡即插即用 但我仍然可以看到 PIV 选择 称为温斯卡探索 如何在
  • SonarQube 如何创建配置文件并向其中导入新规则

    我正在开发 SonarQube 的插件 以便从 xml 文件导入规则 到目前为止 这已经完成 它们确实被导入到 SonarQube 实例中并显示在 规则 下 尽管正在创建质量配置文件 但所有导入的规则都没有添加到其中 我不明白为什么 我不想
  • SELECT 排名中的 SQL UPDATE 超过分区语句

    我的问题是 我有一个这样的表 Company direction type year month value rank 当我创建表时 默认情况下排名为 0 我想要的是使用此选择更新表中的排名 SELECT company direction
  • asm.js - 函数指针应该如何实现

    注 这个问题纯粹是关于asm js与 C 或任何其他编程语言无关 正如标题已经说的 函数指针应该如何高效地实现 我在网上找不到任何东西 所以我想在这里问一下 Edit 我想在我正在开发的编译器中实现虚拟函数 在 C 中我会做类似的事情来生成
  • pyspark.sql.utils.IllegalArgumentException:u'字段“功能”不存在。'

    我正在尝试执行随机森林分类器并使用交叉验证评估模型 我使用 pySpark 工作 输入 CSV 文件以 Spark DataFrame 格式加载 但我在构建模型时遇到了一个问题 下面是代码 from pyspark import Spark