这个spark sql代码编译并运行但是intelliJ(idea-IU-172.4343.14)显示了一个" Ambigious方法调用"错误。
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 50
MaxSpareThreads 125
ThreadLimit 64
ThreadsPerChild 25
ServerLimit 5000
MaxRequestWorkers 5000
MaxConnectionsPerChild 4500
以前版本的intelliJ不会发生这种情况。
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();
}
答案 0 :(得分:3)
我认为这可以链接到scala插件。该插件使Spark的源代码可读,而IntelliJ选择正确的方法失败。如果从IntelliJ卸载插件,则一切正常。但是,您将失去拥有可读的Spark源代码的可能性。
答案 1 :(得分:0)
我在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));
答案 2 :(得分:0)
当您删除Spark核心依赖项时,它运行良好。
尝试在Spark sql依赖项下面使用相同的代码。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>