我有一个自定义对象的DataSet,其中包含一个标签:Double
并且功能为:DenseVector
。
我想过滤和计算特征中具有特定标签和特定值的项目数。
但是,这个:
dataLF.filter(entry => entry.label == 1 && entry.features.values(0) == 0).count()
返回此异常:
由于阶段失败导致作业中止:阶段13.0中的任务0失败1次, 最近的失败:阶段13.0中失去的任务0.0(TID 44,localhost): java.lang.ClassCastException:无法分配实例 scala.collection.immutable.List $ SerializationProxy to field org.apache.spark.sql.execution.FilterExec.otherPreds的类型 scala.collection.Seq在实例中 org.apache.spark.sql.execution.FilterExec
我做错了什么?
答案 0 :(得分:0)
我不明白为什么你在DenseVector上调用值,你确定你不是这个意思(访问向量的第一个元素)?:
dataLF.filter(entry => entry.label == 1 && entry.features(0) == 0).count()
答案 1 :(得分:0)
我不确定您是否遇到了与我相同的问题,但在我使用sbt assembly
打包jar文件然后在EMR集群上进行spark-submit后,我看到了类似的错误消息情况下。
根据document,在dataset.filter()
中使用lambda函数仍然是实验性的,
所以,我尝试将我的代码更改为类似dataframe.filter(col("type") === "open")
的代码,它可以正常运行。
对我的案子来说,这是一个奇怪但微不足道的问题。
对于sbt assembly
情况,jar文件命名为“Simple Project-assembly-0.0.1.jar”(文件名中有空格)
在我将其重命名为“simple-project.jar”之后,一切正常。