问题描述
我正在编写 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"
但是,如果使用上面的 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 (将#修改为@)