Java scala 2.11而非2.12的Spark“错误:类型不匹配”

Java scala 2.11而非2.12的Spark“错误:类型不匹配”,java,scala,maven,apache-spark,Java,Scala,Maven,Apache Spark,我在使用scala 2.11时遇到了一个奇怪的编译错误,而不是在使用spark 2.2.1的2.12时 这是我的scala代码 在哪里 我的pom.xml配置如下 <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.3.1</version>

我在使用scala 2.11时遇到了一个奇怪的编译错误,而不是在使用spark 2.2.1的2.12时

这是我的scala代码

在哪里

我的pom.xml配置如下

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>3.3.1</version>
    <configuration>
      <scalaVersion>2.11</scalaVersion>
    </configuration>
  </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.11.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
</dependencies>
如果我编译2.12

它使用scala 2.11进行编译,我得到以下错误

[INFO]/root/project/src/main/java:-1:INFO:编译 [INFO]/root/project/src/main/scala:-1:INFO:编译 [信息]正在将2个源文件编译为 /根/rmd连接火花/目标/类别,电话1515426201592[错误] /根/rmd连接火花/src/main/scala/SparkConnectTest。scala:40: 错误:类型不匹配;[错误]找到:org.apache.spark.sql.Row=> 需要java.sql.Timestamp[错误]: org.apache.spark.api.java.function.function[org.apache.spark.sql.Row,?] [错误].mapx:Row=>{x4.asInstanceOf[Timestamp]}

[错误]^[错误]发现一个错误[信息] [信息]生成失败[信息]
注意:这不是spark runtime的问题,而是将scala 2.11与spark api一起使用的问题。您有一个javaRDD,因此需要使用Java api和org.apache.spark.api.Java.function.function而不是scala函数。Scala 2.12中添加了支持,以自动将Scala函数转换为Java SAM接口,这就是此代码在Scala 2.12中工作的原因


如果要使用Scala编码,请使用Scala API而不是Java

您有一个javaRDD,因此需要使用Java api和org.apache.spark.api.Java.function.function,而不是Scala函数。Scala 2.12中添加了支持,以自动将Scala函数转换为Java SAM接口,这就是此代码在Scala 2.12中工作的原因

如果要使用Scala编码,请使用Scala API而不是Java

  def minTs(x: Timestamp, y: Timestamp): Timestamp = {
    if (x.compareTo(y) < 0) return x;
    else return y;
  }
<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>3.3.1</version>
    <configuration>
      <scalaVersion>2.11</scalaVersion>
    </configuration>
  </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.11.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
</dependencies>