Java Spark SQL看不到hdfs文件

Java Spark SQL看不到hdfs文件,java,hadoop,apache-spark,hdfs,Java,Hadoop,Apache Spark,Hdfs,我有一个spark应用程序,它运行在集群AWS EMR上 我已将文件添加到hdfs: javaSparkContext.addFile(filePath, recursive); hdfs日志上存在可用文件:文件可读/可执行/可写,但我无法使用spark SQL API从该文件读取信息: LOGGER.info("Spark working directory: " + path); File file = new File(path + "/test.avro"); LOGGER.in

我有一个spark应用程序,它运行在集群AWS EMR上

我已将文件添加到hdfs:

javaSparkContext.addFile(filePath, recursive);
hdfs日志上存在可用文件:文件可读/可执行/可写,但我无法使用spark SQL API从该文件读取信息:

 LOGGER.info("Spark working directory: " + path);
 File file = new File(path + "/test.avro");
 LOGGER.info("SPARK PATH:" + file);
 LOGGER.info("read:" + file.canRead());
 LOGGER.info("execute:" + file.canExecute());
 LOGGER.info("write:" + file.canWrite());
 Dataset<Row> load = getSparkSession()
                      .read()
                      .format(AVRO_DATA_BRICKS_LIBRARY)
                      .load(file.getAbsolutePath()); 

检查hdfs中是否有该文件:

hadoop fs-ls/home/spark/或您的工作目录,而不是/home/spark


如果您在hdfs上有该文件,它看起来像在Spark一侧,只需按照说明中的说明操作,或者将Spark版本更新为最新版本,默认情况下,所有文件都存储在hdfs中的/user/hadoop/文件夹中。您可以使用此知识并加载此常量,但更好的是-需要使用绝对路径

要上载到HDFS并使用此文件,我使用了绝对路径:

new Configuration().get("fs.defaultFS")//get HDFS root
....
 FileSystem hdfs = getHdfsFileSystem();
 hdfs.copyFromLocalFile(true, true, new Path(srcLocalPath), new Path(destHdfsPath));
其中destHdfsPath-绝对路径类似'hdfs://...../test.avro"

然后您可以从HDFS加载此信息:

return getSparkSession()
                .read()
                .format(AVRO_DATA_BRICKS_LIBRARY)
                .load(absoluteFilePath);

注意:可能需要添加一些权限:FileUtil.chmodhdfsDest、u+rw、g+rw、o+rw

可以显示路径的值吗?路径是以root身份运行应用程序的logTry中的Spark工作目录。我为所有用户添加了权限777。这对我没有帮助。
return getSparkSession()
                .read()
                .format(AVRO_DATA_BRICKS_LIBRARY)
                .load(absoluteFilePath);