[英]Apache Spark cannot find class CSVReader
我的代碼嘗試解析一個簡單的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集群。 為此,創建一個包含您的代碼及其依賴項的程序集jar(或“超級” jar)。 sbt和Maven都有程序集插件。 創建程序集jar時,將Spark和Hadoop列為提供的依賴項; 這些不需要捆綁在一起,因為它們是由集群管理器在運行時提供的。
來源: http : //spark.apache.org/docs/latest/submitting-applications.html
當Maven將項目打包到JAR中時,它不會提供依賴項JAR。 為了附帶提供依賴關系JAR,我添加了Maven Shade插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<finalName>${project.artifactId}-${project.version}</finalName>
</configuration>
</plugin>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.