这个spark sql代码编译并运行但是intelliJ(idea-IU-172.4343.14)显示了“Ambigious方法调用”错误。
public static void main(String[] args) {
SparkSession session = SparkSession //
.builder() //
.appName("idea-ambigious-method-call-bug") //
.master("local[*]") //
.getOrCreate();
Dataset<String> cities = session//
.sqlContext()//
.createDataset(Arrays.asList("Paris", "Porto", "London"), Encoders.STRING());
cities.filter(name -> name.startsWith("P")).show();
}
以前版本的intelliJ没有发生这种情况。
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
我认为这可以链接到scala插件。该插件使Spark的源代码可读,IntelliJ在选择正确的方法时失败。如果你从IntelliJ卸载插件,一切都应该工作正常。但是,您将无法获得可读的Spark源代码。
删除Spark核心依赖项时,它运行正常。
尝试相同的代码与下面的Spark sql依赖。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
我在IntelliJ IU-182上遇到了同样的问题(地图的多个实现),但是如果从终端运行相同的程序,则没有任何编译器问题。
SparkSession session = SparkSession.builder().appName("ALB log Analyzer").master("local[2]").getOrCreate();
Dataset<ALBLog> accessLogs = session.read().textFile(logFile).map(ALBLog::parseAlbLog,
Encoders.bean(ALBLog.class));