我需要运行以下命令“hdfs dfs -cat /user/username/data/20220815/EDHSB. CSV”,该命令显示CSV文件的内容(存在于远程HDFS中)。
为了实现以上我使用了下面的代码:
try{
String shpath="hdfs dfs -cat /user/username/data/20220815/EDHSB.CSV";
Process ps = Runtime.getRuntime().exec(shpath);
ps.waitFor();
}
catch (Exception e) {
e.printStackTrace();
}
下一步是从上面的代码中读取CSV文件。第一步是否足够好,或者是否有其他方法可以完成整个流程...
2条答案
按热度按时间5anewei61#
您应该改用
java.lang.Process
和java.lang.ProcessBuilder
,因为这样可以直接在Java代码中截取输出。基本上看起来像这样
为了便于阅读,省略了所有必要的错误处理...
jdzmm42g2#
关于代码有两点:
1.最好 * 不要 * 调用
printStackTrace()
,因为它很容易被忽略。对异常做一些有意义的事情。如果你不能,就在异常的签名中添加一个throws
子句,让异常从你的方法中出来。1.你真的想在开始阅读之前通过调用
waitFor()
来等待进程完成吗?如果你这样做,并且文件非常大,你可能会丢失一些内容,因为Java运行时的缓冲区有限。相反,获得它的输入流并立即开始处理它。当进程退出时,你会得到一个EOF条件。