首页 > 解决方案 > Kotlin(和 scala):方法 scala.collection.TraversableOnce.reverser$2 中没有索引为 0-0 的参数(名称=reverser$module$1 访问=16)

问题描述

spark 3.0.1在我的 kotlin 项目中使用。编译失败并出现以下错误:

e: org.jetbrains.kotlin.util.KotlinFrontEndException: Exception while analyzing expression at (51,45) in /home/user/project/src/main/kotlin/ModelBuilder.kt
...
Caused by: java.lang.IllegalStateException: No parameter with index 0-0 (name=reverser$module$1 access=16) in method scala.collection.TraversableOnce.reverser$2
        at org.jetbrains.kotlin.load.java.structure.impl.classFiles.AnnotationsAndParameterCollectorMethodVisitor.visitParameter(Annotations.kt:48)
        at org.jetbrains.org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1149)
        at org.jetbrains.org.objectweb.asm.ClassReader.accept(ClassReader.java:680)
        at org.jetbrains.org.objectweb.asm.ClassReader.accept(ClassReader.java:392)
        at org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass.<init>(BinaryJavaClass.kt:77)
        at org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass.<init>(BinaryJavaClass.kt:40)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl.findClass(KotlinCliJavaFileManagerImpl.kt:115)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl.findClass(KotlinCliJavaFileManagerImpl.kt:85)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$findClass$$inlined$getOrPut$lambda$1.invoke(KotlinCliJavaFileManagerImpl.kt:113)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$findClass$$inlined$getOrPut$lambda$1.invoke(KotlinCliJavaFileManagerImpl.kt:48)
        at org.jetbrains.kotlin.load.java.structure.impl.classFiles.ClassifierResolutionContext.resolveClass(ClassifierResolutionContext.kt:60)
        at org.jetbrains.kotlin.load.java.structure.impl.classFiles.ClassifierResolutionContext.resolveByInternalName$frontend_java(ClassifierResolutionContext.kt:101)
        at org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryClassSignatureParser$parseParameterizedClassRefSignature$1.invoke(BinaryClassSignatureParser.kt:141)

我已经多次清理/重建项目,删除了构建目录并尝试使用 gradle 从命令行构建。

发生这种情况的代码:

    val data = listOf(...)
    val schema = StructType(arrayOf(
            StructField("label", DataTypes.DoubleType, false, Metadata.empty()),
            StructField("sentence", DataTypes.StringType, false, Metadata.empty())
    ))

    val dataframe = spark.createDataFrame(data, schema) // <- offending line.

正在使用 kotlin 版本1.4.0,升级到1.4.10没有任何变化,仍然是同样的错误。

看起来这个错误(和这个)已经报告给 JetBrains,但真的不可能在 kotlin 1.4 中使用 spark 3(本地模式)吗?

标签: scalaapache-sparkkotlin

解决方案


通过将以下内容添加到dependencyManagement,我设法使其与Spring Boot(2.3.5)一起使用:

dependencies {
    dependencySet("org.scala-lang:2.12.10") {
        entry("scala-library")
    }
}

这会将 scala-library jar 从 2.12.12 降级到 2.12.10 版本,这与我项目中的 scala-reflect jar 版本相同。我也在使用 Kotlin 1.4.10


推荐阅读