首页 > 解决方案 > Spark:读取/写入 CSV 时出现 ClassNotFoundException

问题描述

我正在尝试将如下 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。

有人可以帮我解决这个问题吗?

标签: javaapache-sparkhdfsdatabricks

解决方案


 <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>

尝试将其添加到 pom.xml 中。如果这不起作用,请从此处手动下载 JAR https://mvnrepository.com/artifact/org.apache.commons/commons-csv/1.5并添加使用--jars来触发提交。那肯定能解决问题


推荐阅读