当前位置: 首页 > 知识库问答 >
问题:

SparkML多层接收器错误:java。lang.ArrayIndexOutOfBoundsException

段干茂实
2023-03-14

我有下面的模型,我想使用SparkML来估计。

val formula = new RFormula()
  .setFormula("vtplus15predict~ vhisttplus15 + vhistt + vt + vtminus15 + Time + Length + Day")
  .setFeaturesCol("features")
  .setLabelCol("label")

formula.fit(data).transform(data)

注:特征为向量,标签为双精度

root
 |-- features: vector (nullable = true)
 |-- label: double (nullable = false)

我将我的MLP估计器定义如下:

val layers = Array[Int](6, 5, 8, 1) //I suspect this is where it went wrong

val mlp = new MultilayerPerceptronClassifier()
  .setLayers(layers)
  .setBlockSize(128)
  .setSeed(1234L)
  .setMaxIter(100)

// train the model
val model = mlp.fit(train)

不幸的是,我出现了以下错误:

使用Spark的默认log4j配置文件:org/apache/Spark/log4j defaults。属性

线程“main”组织中出现异常。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段3.0中的任务0失败1次,最近的失败:阶段3.0中的任务0.0丢失(TID 3,localhost,executor driver):java。lang.ArrayIndexOutOfBoundsException:11 at org。阿帕奇。火花ml.分类。LabelConverter$。编码标签点(MultilayerPerceptronClassifier.scala:121)位于org。阿帕奇。火花ml.分类。多层概念分类器$$anonfun$3。在org上应用(MultilayerPerceptronClassifier.scala:245)。阿帕奇。火花ml.分类。多层概念分类器$$anonfun$3。在scala上应用(MultilayerPerceptronClassifier.scala:245)。收集迭代器$$anon$11。接下来(迭代器。scala:363)在scala。收集迭代器$GroupEditor。在scala上进行破坏性处理(迭代器。scala:935)。收集迭代器$GroupEditor。go(迭代器。scala:950)。。。

共有3个答案

刘曾琪
2023-03-14

解决方案是首先找到允许逃离ArrayIndexOutBound的局部最优,然后使用蛮力搜索找到全局最优。Shaido建议找到n

例如,val层=Array[Int](6,5,8, n)。这假设特征向量的长度为6。-Shaido

所以让n是一个大整数(n=100)然后手动使用蛮力搜索得出一个好的解决方案(n=50然后尝试n=32-错误,n=35-完美)。

谢多的功劳。

马高谊
2023-03-14

重新排列数据集,因为错误显示您的数组少于功能集中的数组,或者您的数据集具有提示错误的空集。我在从事MLP项目时遇到了这种错误。希望我的回答能帮助你。谢谢你伸出援手

步兴为
2023-03-14

org.apache.spark.ml.classification.LabelConverterlassifier.scala:121

这告诉我们数组超出了多层概念分类器(multilayerperceptronsider)的界限。scala文件,让我们看看那里的代码:

def encodeLabeledPoint(labeledPoint: LabeledPoint, labelCount: Int): (Vector, Vector) = {
  val output = Array.fill(labelCount)(0.0)
  output(labeledPoint.label.toInt) = 1.0
  (labeledPoint.features, Vectors.dense(output))
}

它对数据集中的标签执行一次性编码。ArrayIndexOutOfBoundsException发生是因为输出数组太短。

通过返回代码,可以发现标签计数与层数组中的输出节点数相同。换句话说,输出节点的数量应该与类的数量相同。查看MLP的文档,有以下几行:

输出层中节点N的数量对应于类的数量。

因此,解决办法是:

>

重构数据以使其具有与网络输出节点相同数量的类。

注意:最终输出层应该始终是2个或更多,而不是1个,因为每个类应该有一个节点,单个类的问题没有意义。

 类似资料:
  • 我正在尝试从kafka中的主题将数据插入postgres数据库。我正在使用以下命令加载 sink-quick start-MySQL . properties如下 我得到的错误是 Postgres jar文件已经在文件夹中。有人能提出建议吗?

  • 机器学习库也称为“SparkML”或“MLLib”,由常用的学习算法组成,包括分类,回归,聚类和协同过滤。 为什么要学习SparkML for Agile? Spark正在成为构建机器学习算法和应用程序的事实平台。 开发人员使用Spark在Spark框架中以可扩展和简洁的方式实现机器算法。 我们将通过该框架学习机器学习,其实用程序和算法的概念。 敏捷总是选择一个框架,它可以提供简短快速的结果。 M

  • 我对Kafka connect很陌生。我想把我的信息从Kafka主题推到弹性搜索。在阅读了可用的文档之后,我从发行版tar下载并编译了弹性搜索接收器。拉链(https://github.com/confluentinc/kafka-connect-elasticsearch/releases) 我添加了弹性搜索属性文件,并将上述jar包含在类路径中。当我在独立模式下运行kafka connect时

  • 尝试运行水槽作业时,我收到下面给出的错误。我正在云时代设置上运行它。 Kafka是来源 Morphline用作拦截器,从中创建avro记录 接收器为HDFS 完全相同的文件(morphline,avro schema等。水槽配置)。但是在另一个环境中,它会抛出这个错误。 我能够在水槽上找到相关代码:https://github.com/apache/flume/blob/trunk/flume-n

  • 我对这两种方法的不同感到困惑,但我肯定我做错了什么。 下面我有一个工作示例和一个非工作示例。在工作示例中,我将变量测试器指定为“映射”,在非工作示例中,我尝试将其指定为映射。在第二个示例中,错误如下所示: 我没有看到tester变量的类型与myMap变量的类型之间的联系。 虽然Eran发布了对我的原始版本的解释,但它表明我应该使用收藏家。托马普而不是收藏家。groupBy,因为我的目标是为从“pr

  • 我正在尝试设置Kafka Connect接收器,以便使用Datastax连接器将主题中的数据收集到Cassandra表中:https://downloads.Datastax.com/#AKC 运行一个直接在代理上运行的独立worker,运行Kafka 0.10.2.2-1: 但我有以下错误: 卡桑德拉或Kafka方面没有额外的错误。我在cassandra节点上看到活动连接,但没有任何东西到达密钥