【问题标题】:How to fix missing parameter type for foreach() in scala如何修复scala中foreach()的缺失参数类型
【发布时间】:2020-05-22 22:58:30
【问题描述】:

下面是我的 scala 11.12 代码

val res= Config().getConfig(source_fields.toLowerCase).entrySet()
    println("Entry set is:"+ res.toString)
    val pattern = Pattern.compile("^[$].*$")
    println("Regex pattern is: "+pattern)
    var query=""
    res.forEach(elem => {
      val matcher = pattern.matcher(elem.getValue.render().replace("\"", ""))
      query += "," + (if (matcher.matches()) "'" + matcher.group().replace("$", "") + "'" + " as " + elem.getKey.replace("\"", "`")
      else elem.getValue.render().replace("\"", "") + " as " + elem.getKey.replace("\"", "`")
        )
    }
    )

如果我添加 sdk-2.12,这将成功构建。但是我的集群是用 scala 2.11 设置的,它在那里失败并出现错误 - Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object。知道如何解决这个问题吗?

【问题讨论】:

标签: scala dataframe apache-spark hadoop intellij-idea


【解决方案1】:

这种异常指向scala版本不匹配,要么你混合了scala版本的依赖,要么你的scala版本在编译和运行环境之间不同。

因此,如果您使用 scala 2.12 构建程序并尝试使用 scala 2.11 运行它,您可能会遇到此异常

【讨论】:

  • 如果我将我的 sdk 更改为 2.11,它会为行 'res.forEach(elem => {' 抛出一个错误,说“缺少参数类型”并且无法编译。如果我将它改回 2.12 ,它构建成功,然后在 println(df.collect()) 失败并出现错误 - [Lorg.apache.spark.sql.Row;@3b6fa89a。这段代码几周前工作正常,但现在失败了
【解决方案2】:

我通过使用 res.asScala.foreach 解决了这个问题

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 2010-11-06
    • 2012-02-23
    • 2017-04-07
    • 2019-08-18
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多