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



我有一个自定义对象的数据集,它包含一个标签:Double和特征:DenseVector

我想过滤并计算具有特定标签和特征中特定值的项目的数量。

然而,

:

dataLF.filter(entry => entry.label == 1 && entry.features.values(0) == 0).count()

返回这个异常:

Job aborted due to stage failure: task0 in stage 13.0 failed 1次,最近一次失败:在阶段13.0 (TID 44, localhost)中丢失任务0.0的实例不能赋值scala.collection.immutable。列出$SerializationProxy到字段filterexec . otherpreds的类型collection. seq的实例org.apache.spark.sql.execution.FilterExec

我做错了什么?

我不明白为什么你在DenseVector上调用值,你确定你不是这个意思(访问向量的第一个元素)吗?:

dataLF.filter(entry => entry.label == 1 && entry.features(0) == 0).count()

我不确定您是否遇到了与我相同的问题,但是在我使用sbt assembly打包jar文件然后在EMR集群上spark提交它之后,我看到了与您的情况类似的错误消息。

根据文献,在dataset.filter()中使用lambda函数还处于实验阶段,

所以,我试着把我的代码改成像dataframe.filter(col("type") === "open")这样的东西,它可以正常工作,没有错误。


对于我的案例来说,这是一个奇怪但微不足道的问题。对于sbt assembly的情况,jar文件被命名为"Simple Project-assembly-0.0.1.jar"(文件名中有一个空格)在我将它重命名为"simple-project.jar"之后,一切都正常了。

相关内容

  • 没有找到相关文章

最新更新