带有 Scala 插件、Maven 和 Spark 的 Eclipse 项目

Posted

技术标签:

【中文标题】带有 Scala 插件、Maven 和 Spark 的 Eclipse 项目【英文标题】:Eclipse Project with Scala Plugin, Maven and Spark 【发布时间】:2014-12-27 13:13:03 【问题描述】:

我有 Eclipse Kepler,我已经安装了 Maven 和 Scala 插件。我创建一个新的 Maven 项目并添加依赖项

groupId: org.apache.spark artifactId:spark-core_2.10 版本:1.1.0

根据http://spark.apache.org/downloads.html 的当前文档,一切都很好,Scala 2.10 的 jar 也添加到了项目中。然后我将“Scala Nature”添加到项目中,这添加了 Scala 2.11,最终出现以下错误

在构建路径中找到多个 scala 库 (C:/Eclipse/eclipse-jee-kepler-SR2-win32-x86_64/plugins/org.scala-lang.scala-library_2.11.2.v20140721-095018-73fb460c1c .jar,C:/Users/fff/.m2/repository/org/scala-lang/scala-library/2.10.4/scala-library-2.10.4.jar)。 至少有一个版本不兼容。 请更新项目构建路径,使其仅包含兼容的 scala 库。

是否可以同时使用 Spark(来自 Maven)和 Scala IDE 插件?有关如何解决此问题的任何想法?

感谢您的帮助。问候

【问题讨论】:

【参考方案1】:

简而言之,是的,这是可能的。

Spark 当前使用的是 Scala 2.10,最新的 Scala IDE 是针对 2.10 和 2.11“交叉发布”的。您需要选择基于2.10的版本,即3.0.3。

但是,处于候选发布模式的下一个主要版本 4.0 具有多版本支持。您可以创建一个 Scala 项目并选择您想要使用的 Scala 版本(2.10 或 2.11)。如果您愿意,可以尝试一下。

【讨论】:

谢谢,成功了。我为该项目选择了 Scala 2.10,一切正常。亲切的问候【参考方案2】:

如果有人在搜索相同的东西时偶然发现:

我最近创建了 Maven 原型,用于使用 Scala 2.10.4 项目引导新的 Spark 1.3.0。 请按照此处的说明进行操作: https://github.com/spark-in-action/scala-archetype-sparkinaction

对于 IntelliJ IDEA,首先从命令行生成项目,然后导入 IDE。

【讨论】:

【参考方案3】:

您已经安装了 Scala Ide 插件,但只有在您的项目中包含 Scala 类时,项目的 Scala 特性才有用。 然而,Spark 和 Scala 可以一起工作。确保您使用兼容的版本。你可以在你的电脑上install scala,然后使用兼容的spark maven依赖。

【讨论】:

【参考方案4】:

是的,你可以..使用我在下面提供的 pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.spark-scala</groupId>
    <artifactId>spark-scala</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>$project.artifactId</name>
    <description>Spark in Scala</description>
    <inceptionYear>2010</inceptionYear>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <encoding>UTF-8</encoding>
        <scala.tools.version>2.10</scala.tools.version>
        <!-- Put the Scala version of the cluster -->
        <scala.version>2.10.4</scala.version>
    </properties>

    <!-- repository to add org.apache.spark -->
    <repositories>
        <repository>
            <id>cloudera-repo-releases</id>
            <url>https://repository.cloudera.com/artifactory/repo/</url>
        </repository>
    </repositories>

    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <testSourceDirectory>src/test/scala</testSourceDirectory>
        <plugins>
            <plugin>
                <!-- see http://davidb.github.com/scala-maven-plugin -->
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.13</version>
                <configuration>
                    <useFile>false</useFile>
                    <disableXmlReport>true</disableXmlReport>
                    <includes>
                        <include>**/*Test.*</include>
                        <include>**/*Suite.*</include>
                    </includes>
                </configuration>
            </plugin>

            <!-- "package" command plugin -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>1.2.1</version>
        </dependency>
    </dependencies>
</project>

【讨论】:

【参考方案5】:

Spark JAR 文件有 2 种类型(只看名称):

名称中包含“程序集”而不是“核心”(内部包含 Scala)

名称包含单词“core”而不是“assembly”(内部没有 Scala)。

您应该通过“添加外部 Jar”(您需要的版本)在您的构建路径中包含“核心”类型,因为 Scala IDE 已经为您提供了一个 Scala。

或者,您可以利用 SBT 并添加以下依赖项(同样,请注意您需要的版本):

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0"

那么您不应该在构建路径中“强制”包含任何 spark JAR。

快乐的火花:

扎尔

>

【讨论】:

以上是关于带有 Scala 插件、Maven 和 Spark 的 Eclipse 项目的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA开发Spark的Maven项目Scala语言

带有 POM 的 SparkSQL-Scala

IDEA+maven搭建scala开发环境(spark)(半转载)

spark学习进度1

spark3的打包

如何在idea中用maven配置spark和scala