001 /*
002 * Copyright 2011 Christian Kumpe http://kumpe.de/christian/java
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package de.kumpe.hadooptimizer.examples.analysis;
017
018 import java.io.PrintWriter;
019
020 import org.apache.commons.cli.Option;
021 import org.apache.commons.cli.Options;
022 import org.apache.hadoop.fs.FileSystem;
023 import org.apache.hadoop.fs.Path;
024 import org.apache.hadoop.io.LongWritable;
025 import org.apache.hadoop.io.ObjectWritable;
026 import org.apache.hadoop.io.SequenceFile;
027 import org.apache.hadoop.mapreduce.Reducer;
028
029 import de.kumpe.hadooptimizer.examples.Example;
030 import de.kumpe.hadooptimizer.examples.painting.SvgRenderer;
031
032 /**
033 * Convert the {@link Reducer} results from {@link SvgRenderer} to a text-based
034 * csv-file.
035 *
036 * @author <a href="http://kumpe.de/christian/java">Christian Kumpe</a>
037 */
038 public class Convert extends Example {
039 private static final String OPTION_FORCE = "f";
040
041 @Override
042 public Options createOptions() {
043 final Options options = new Options();
044 final Option overwriteOption = new Option(OPTION_FORCE, "force", false,
045 "overwrite existing outputfiles");
046 options.addOption(overwriteOption);
047 return options;
048 }
049
050 @Override
051 protected void execute() throws Exception {
052 if (commandLine.getArgList().isEmpty()) {
053 throw new IllegalArgumentException("No input-file specified...");
054 }
055
056 // read command-line
057 final boolean overwrite = commandLine.hasOption(OPTION_FORCE);
058 final String input = (String) commandLine.getArgList().get(0);
059 final String output = input + ".csv";
060
061 log.info("Converting " + input + " to " + output);
062
063 // open input
064 final Path inputPath = new Path(input);
065 final FileSystem inputFileSystem = inputPath.getFileSystem(getConf());
066 final SequenceFile.Reader reader = new SequenceFile.Reader(
067 inputFileSystem, inputPath, getConf());
068
069 // open output
070 final Path outputPath = new Path(output);
071 final FileSystem outputFileSystem = outputPath.getFileSystem(getConf());
072 final PrintWriter writer = new PrintWriter(outputFileSystem.create(
073 outputPath, overwrite));
074
075 // read records and write lines
076 final LongWritable key = new LongWritable();
077 final ObjectWritable value = new ObjectWritable();
078 while (reader.next(key, value)) {
079 final double[] doubles = (double[]) value.get();
080 for (final double d : doubles) {
081 writer.print(d);
082 writer.print(' ');
083 }
084 writer.println();
085 }
086 writer.close();
087 reader.close();
088 }
089
090 @Override
091 protected String getVersionInfo() {
092 return "$Id: Convert.java 3985 2011-05-05 18:40:10Z baumbart $";
093 }
094 }