【问题标题】:Class Cast Exception when filtering in Spark 2.0在 Spark 2.0 中过滤时出现类转换异常
【发布时间】:2017-03-16 04:42:27
【问题描述】:

我有一个自定义对象的数据集,其中包含标签:Double 和功能:DenseVector

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

但是,这个:

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

返回此异常:

作业因阶段失败而中止:阶段 13.0 中的任务 0 失败 1 次, 最近失败:在 13.0 阶段丢失任务 0.0(TID 44,本地主机): java.lang.ClassCastException:无法分配实例 scala.collection.immutable.List$SerializationProxy 到字段 org.apache.spark.sql.execution.FilterExec.otherPreds 类型 scala.collection.Seq 在实例中 org.apache.spark.sql.execution.FilterExec

我做错了什么?

【问题讨论】:

    标签: scala apache-spark dataset spark-dataframe


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我不确定您是否遇到与我相同的问题,但是在我使用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”后,一切正常。

      【讨论】:

        猜你喜欢
        • 2017-02-10
        • 2013-10-29
        • 2017-03-10
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多