我有一个包含42个要素和1个标签的数据集。
我想在执行决策树以检测异常之前应用库spark ML的选择方法卡方选择器,但是在卡方选择器应用期间遇到此错误:


  org.apache.spark.SparkException:由于阶段失败,作业中止了:
  阶段17.0中的任务0失败1次,最近一次失败:丢失的任务
  17.0阶段的0.0(TID 45,本地主机,执行程序驱动程序):org.apache.spark.SparkException:卡方检验期望因子
  (分类值),但发现了10000个以上的不同值
  第11栏


这是我的源代码:

from pyspark.ml.feature import ChiSqSelector
selector = ChiSqSelector(numTopFeatures=1, featuresCol="features",outputCol="features2", labelCol="label")
result = selector.fit(dfa1).transform(dfa1)
result.show()

最佳答案

正如您在错误消息中看到的那样,您的features列在vector中包含超过10000个不同的值,并且看起来它们是连续的而不是分类的,ChiSq只能处理1万个类别,并且您不能增加该值。

  /**
   * Max number of categories when indexing labels and features
   */
  private[spark] val maxCategories: Int = 10000


在这种情况下,可以将VectorIndexer.setMaxCategories()参数 10k时,该方法才起作用。

07-25 21:01