Java scala 2.11而非2.12的Spark“错误:类型不匹配”
我在使用scala 2.11时遇到了一个奇怪的编译错误,而不是在使用spark 2.2.1的2.12时 这是我的scala代码 在哪里 我的pom.xml配置如下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>
<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>