MapReduceのリデューサー機能でcsvをファイルに書き込もうとしています。これが私のコードです:
public class DataSet311Reducer extends Reducer<Text, Text, Text, Text> {
@Override
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path = new Path(key.toString().toLowerCase() + ".csv");
FSDataOutputStream os = fs.create(path);
os.writeChars("KEY,DATE,AGENCY,DESCRIPTOR,LOCATIONTYPE,INCIDENTZIP,INCIDENTADDRESS,LATITUDE,LONGITUDE\n");
StringBuilder sb = new StringBuilder();
for (Text value : values) {
sb.append(value.toString());
sb.append("|");
os.writeUTF(value.toString());
os.writeUTF("\n");
}
os.close();
context.write(key, new Text(sb.toString()));
}
}
CartoDB で使用するために、ファイルを UTF-8 エンコーディングで保存する必要があります。ファイルヘッダーを確認すると、
unspecified.csv: application/octet-stream; charset=binary
適切なエンコーディングとヘッダー コンテンツを使用してコンテンツを保存するにはどうすればよいですか?