逻辑背后的文件分隔符和前缀文件//// 在 InputPath Java Spark read.textFile

问题描述

我正在编写 JAVA 代码以将文件从本地目录上传到 HDFS 系统。我正在 Windows 10 PC 上开发,编辑器为:IntelliJ IDEA。将开发的代码编译成JAVA jar,部署到linux服务器上。

我将 inputPath 作为字符串:inputPathStr 和 outputPath 作为字符串:outputStr。 当我从本地文件夹复制到 HDFS 时,例如使用以下代码

fs.copyFromLocalFile(new Path(inputPathStr),new Path(outputPathStr));

如果我在 JAVA 代码中尝试硬编码路径,则 inputPathStr 和 outputPathStr 将是

inputPathStr = "C:\\Xiang\\cs_hdfs\\csByDate\\20200303\\";
outputPathStr = "hdfs://localhost:9820/wimp/contract-snapshot/year=2020/month=3/day=3/";

而且它工作正常。如果我通过“程序参数”传递参数,则 inputPathStr 将是

inputPathStr = "C:\Xiang\cs_hdfs\csByDate\testMetafiles\20200303"

如下图所示:

enter image description here

但是,如果使用上面的 inputPathStr,我会遇到以下代码的问题:

JavaRDD<String> stringJavaRDD = read.textFile(inputPathStr).javaRDD();

当使用 read.textFile 时,我必须在 inputPathStr 之前使用前缀:file//// 以便函数 read.textFile(inputPathStr) 工作正常。 IE。 textFile 的 inputPathStr 需要是

inputPathStr = "file////C:\\Xiang\\cs_hdfs\\csByDate\\20200303\\";

我很难理解何时使用哪种文件分隔符。为什么函数 read.textFile 需要前缀 file//// 以及为什么文件分隔符可以是 ///\\,具体取决于我们如何使用 inputPathStr。>

此外,如果我想在 linux 上部署 jar,我应该使用哪种文件分隔符(路径),例如当输入数据在 Linux 上的 /home/xiang/data/csByDate/20200303 下时?

谁能解释使用不同文件分隔符背后的想法?我是否应该在 Java 代码添加前缀 file////(或 file/file\,哪个?)以在 Windows(或 Linux)上使用函数 read.textFile?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...