【发布时间】:2016-09-25 16:09:09
【问题描述】:
我尝试解析简单 csv 文件的代码如下所示:
SparkConf conf = new SparkConf().setMaster("local").setAppName("word_count");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> csv = sc.textFile("/home/user/data.csv");
JavaRDD<String[]> parsed = csv.map(x-> new CSVReader(new StringReader(x)).readNext());
parsed.foreach(x->System.out.println(x));
但是,Spark 作业以找不到类的异常结束,提示找不到 CSVReader。我的pom.xml 看起来像这样:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>3.8</version>
<scope>provided</scope>
</dependency>
</dependencies>
我该如何解决这个问题?
【问题讨论】:
-
嗯...您是否在运行时提供所需的库?
-
旁注 - Spark 1.1.0 是一个非常旧的版本。当前版本是 2.0.0。
-
@Seelenvirtuose 我不知道如何回答。我是Maven的新手。我的理解是
provided会导致 JAR 被下载并与将要创建的最终 JAR 一起提供。 :// -
不幸的是,不是。范围
provided是对打包工具(例如 maven-war-plugin 或 maven-assembly-plugin 或其他任何东西)不在打包程序中发送此库的提示,因为它将由运行时环境提供(例如,您使用的 tomcat 安装)。例如,Java EE API 是一个您依赖但始终由运行时提供的库。通常不提供其他库,因此您需要将其范围设置为compile。如果有帮助,我会为此写一个简短的答案。 -
@Seelenvirtuose 如果我错了,请纠正我,对于 Spark 运行时未提供的所有外部依赖项(例如 twitter4j、GSON 等),我必须将范围设置为
compile,事实上?跨度>
标签: java maven intellij-idea apache-spark