美文网首页
scala val 和def 的区别,graphx mapTri

scala val 和def 的区别,graphx mapTri

作者: NazgulSun | 来源:发表于2020-04-07 10:34 被阅读0次

spark + scala + sql+graphx 的版本一致性的坑

1)
 <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
            <exclusions>
2)
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.binary.version}</artifactId>
            <version>2.1.0</version>
        </dependency>
3)
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-graphx_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

这些个地方都要一致,不然就会出现
java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)
等等各种错误。

在使用spark graphx 的mapEdge 和mapVertices的时候。
我们使用了 def a(a:vertex) ={}
这种方式,然后 执行 mapEdge 的时候,

Caused by: java.io.NotSerializableException: com.datayes.quantgraph.spark.SpkQuantGraph
Serialization stack:
    - object not serializable (class: com.datayes.quantgraph.spark.SpkQuantGraph, value: com.datayes.quantgraph.spark.SpkQuantGraph@79392584)
    - field (class: $iw, name: mygraph, type: class com.datayes.quantgraph.spark.SpkQuantGraph)
    - object (class $iw, $iw@51b1732d)
    - field (class: $iw, name: $iw, type: class $iw)
    - object (class $iw, $iw@6d4f1a44)
    - field (class: $iw, name: $iw, type: class $iw)
    - object (class $iw, $iw@5ceb6796)

序列化的错误,通常就是 函数没有实现序列化接口。
但是奇怪的是,我们换了一种写法就是可以的。
比如 val a : (Int => Boolean) = (_ % 2 == 0)

原来, val 和def 来定义一个函数。在scala 中是有区别的。
https://blog.csdn.net/weixin_41705780/article/details/79268963

val 这种定义lambda函数,是实现了Function接口。
这个FUnction接口是默认可以序列化的。而graphx
的mapEdge 和mapVertex函数, 需要接收一个 Function对象。
所以 必须使用lambda的写法。

相关文章

网友评论

      本文标题:scala val 和def 的区别,graphx mapTri

      本文链接:https://www.haomeiwen.com/subject/zhdgphtx.html