在Spark 2.0中过滤时的类强制转换异常

时间:2016-11-02 18:28:47

标签: scala apache-spark dataset spark-dataframe

我有一个自定义对象的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

我做错了什么?

2 个答案:

答案 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”之后,一切正常。