我正在尝试将如下所示的DataFrame写入HDFS上的CSV文件
df.write()
.format("com.databricks.spark.csv")
.option("header", "true")
.save("/user/cloudera/csv");
但出现以下错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/csv/CSVFormat
...
Caused by: java.lang.ClassNotFoundException: org.apache.commons.csv.CSVFormat
... 21 more
我的pom.xml具有以下依赖性
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-csv_2.10</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.6.0</version>
</dependency>
我将spark 1.6.0与scala 2.10.5结合使用,并使用以下命令提交作业
spark-submit --jars /path/spark-csv_2.10-1.5.0.jar --class com.iris.Begin /path/CsvSolver.jar
.m2存储库中也有commons-csv / 1.1和commons-csv / 1.5。
有人可以帮我吗?
答案 0 :(得分:0)
只需尝试将那些需要的jar添加到spark文件夹... \ spark \ jars \的jars文件夹中
答案 1 :(得分:0)
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.5</version>
</dependency>
尝试将其添加到pom中。如果那不起作用,请手动从此处https://mvnrepository.com/artifact/org.apache.commons/commons-csv/1.5下载JAR,然后使用-jars 进行添加以引发提交。那肯定可以解决问题
答案 2 :(得分:0)
最好构建一个包含所有依赖项的胖jar(spark-core
应标记为provided
),然后仅提交此jar,而不添加任何其他--jars
选项。
在Maven中,您可以将Maven Assembly plugin与predefined profile jar-with-dependencies结合使用来生成胖子。像这样:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>