【问题标题】:scala code works on spark-shell but not in spark-submitscala 代码适用于 spark-shell 但不适用于 spark-submit
【发布时间】:2015-08-05 17:11:39
【问题描述】:

以下是主要的scala代码

1.val conf=new SparkConf()
2.conf.setMaster("spark://master:7077")
3.conf.setAppName("Commnity Detective")
4.val sc=new SparkContext(conf)
5.val rdd=sc.textFile("hdfs://master:9000/lvcy/test/ungraph/test.txt")
6.val maprdd=rdd.map(line =>{val p=line.split("\\s+");(p(0),p(1))}) union rdd.map( line =>{val p=line.split("\\s+");(p(1),p(0))})
7.val reducerdd=maprdd.reduceByKey((a,b)=>a+"\t"+b)
8.val reduceArray=reducerdd.collect()
9.val reducemap=reduceArray.toMap

问题陈述:

  1. 复制spark-shell运行的代码(line:5-9),结果是对的
  2. 如果把代码放到Eclipse中生成jar包,然后使用"spark-submit"提交作业,有下一个错误("Main:scala:21" is the top line:9, 也就是说映射错误的方法,WHY?):

    Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
    at net.lvcy.main.Main$.main(Main.scala:21)
    at net.lvcy.main.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:665)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:170)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:193)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:112)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
    

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    看起来像是 Scala 版本不匹配。您应该确保用于生成 jar 的 Scala 版本与 Spark 集群二进制文件的 Scala 版本相同,例如2.10.

    【讨论】:

    • 我本地的scala版本是2.11.7,spark集群的版本也是2.11.7
    • 2.11.7 也是您在构建脚本中定义的版本吗?
    • 是的。还要确保你的 pom 中的所有 Spark 依赖项都是使用 Scala 2.11 构建的。它们有各自的后缀_2.11
    • 下一个是我的pom.xml,不知道怎么修改 org.apache.sparkspark-core_2.11 1.4.1srcmaven-compiler-plugin3.31.81.8
    • 关键是方法“toMap”是Error
    【解决方案2】:

    Prebuild Spark 发行版是使用 Scala 2.10 编译的,因此请确保您在 Scala 2.10 下运行 Spark 集群。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      相关资源
      最近更新 更多