Pig Latin 用户定义函数中的 HDFS 路径
HDFS path in user defined function of Pig Latin
我用 Java 语言编写了以下用户定义函数:
我定义了FileWriter,但执行后出现错误信息。
程序:
outputFile = new FileWriter("hdfs://NaeNode:9000/input/SG.csv",true);
fw = new BufferedWriter(outputFile);
从 UDF 捕获错误:trial.obvious_guess [hdfs:/NaemNode:9000/input/SG.csv(没有这样的文件或目录)]
我如何解决这个问题,因为我在执行时使用 [pig -x MapReduce fie.pig]
要存储在 HDFS 中,您必须使用 FSDataOutputStream。
FileSystem.create returns FSDataOutputStream.
查看下面的代码。
public static void main(String[] args) throws Exception {
FSDataOutputStream fout = null;
try {
Path path = new Path("hdfs://NaeNode:9000/input/SG.csv");
String data = "data";
FileSystem fileSystem = FileSystem.get(new Configuration());
if (!fileSystem.exists(path)) {
fout = fs.create(path);
} else {
fout = fs.append(path)
}
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(fout)
);
bufferedWriter.write(data);
bufferedWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我用 Java 语言编写了以下用户定义函数:
我定义了FileWriter,但执行后出现错误信息。
程序:
outputFile = new FileWriter("hdfs://NaeNode:9000/input/SG.csv",true);
fw = new BufferedWriter(outputFile);
从 UDF 捕获错误:trial.obvious_guess [hdfs:/NaemNode:9000/input/SG.csv(没有这样的文件或目录)]
我如何解决这个问题,因为我在执行时使用 [pig -x MapReduce fie.pig]
要存储在 HDFS 中,您必须使用 FSDataOutputStream。
FileSystem.create returns FSDataOutputStream.
查看下面的代码。
public static void main(String[] args) throws Exception {
FSDataOutputStream fout = null;
try {
Path path = new Path("hdfs://NaeNode:9000/input/SG.csv");
String data = "data";
FileSystem fileSystem = FileSystem.get(new Configuration());
if (!fileSystem.exists(path)) {
fout = fs.create(path);
} else {
fout = fs.append(path)
}
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(fout)
);
bufferedWriter.write(data);
bufferedWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}