使用spark sql在intelliJ上调用不相关的ambigious方法错误

时间:2017-10-23 09:52:51

标签: java intellij-idea apache-spark-sql apache-spark-dataset

这个spark sql代码编译并运行但是intelliJ(idea-IU-172.4343.14)显示了一个" Ambigious方法调用"错误。

enter image description here

<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();
}

3 个答案:

答案 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>