Java spark无法从spark sql中的本地文件系统加载文件

Posted

技术标签:

【中文标题】Java spark无法从spark sql中的本地文件系统加载文件【英文标题】:Java spark unable to load file from local file system in spark sql 【发布时间】:2020-11-23 08:15:00 【问题描述】:

我是在 ubuntu 18.0 上使用 java 激发和学习 spark 的新手,没有明确的集群。 我在 java/main/resources 文件夹中的本地文件系统中保存了 data.csv 文件。

在执行下面的代码时,

SparkSession sparkSession = SparkSession.builder()
            .appName("sparksql").master("local[*]")
            .getOrCreate();



Dataset<Row> dataset = sparkSession.read()
                .option("header", true)
                .csv("/media/home/work/sparksamples/src/main/resources/exams/test.csv");

下面的错误来了:

20/11/23 16:07:46 WARN NativeCodeLoader:无法为您的平台加载 native-hadoop 库...在适用的情况下使用内置 java 类

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/DistributedFileSystem
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$.listLeafFiles(InMemoryFileIndex.scala:316)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$.$anonfun$bulkListLeafFiles$1(InMemoryFileIndex.scala:195)
    at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:238)
    at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
    at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)

Could 20/11/23 16:07:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/DistributedFileSystem
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$.listLeafFiles(InMemoryFileIndex.scala:316)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$.$anonfun$bulkListLeafFiles$1(InMemoryFileIndex.scala:195)
    at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:238)
    at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
    at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)

如何在 Ubuntu 中不使用 hdfs 从本地文件系统加载文件?

【问题讨论】:

【参考方案1】:

这是由于在最新版本 - 3.3 中缺少 hadoop-client jar。

 <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.0</version>
  </dependency>

【讨论】:

以上是关于Java spark无法从spark sql中的本地文件系统加载文件的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL Java GenericRowWithSchema无法强制转换为java.lang.String

无法从 spark sql 插入配置单元分区表

使用 Spark SQL 时无法将获取 B 转换为 java.lang.String

无法从 impala/hive/spark sql 访问“spark 注册表”

无法使用 Jupyter 笔记本上的 pyspark 从 Apache Spark 连接到 MS SQL

Spark 2.0 `java.lang.ClassCastException:java.lang.Integer 无法转换为 java.sql.Date` 错误