/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.sysml.runtime.matrix.data; import java.io.Serializable; import org.apache.hadoop.io.DoubleWritable; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.apache.hadoop.mapred.InputFormat; import org.apache.hadoop.mapred.SequenceFileInputFormat; import org.apache.hadoop.mapred.TextInputFormat; import org.apache.sysml.parser.DataExpression; import org.apache.sysml.runtime.DMLRuntimeException; import org.apache.sysml.runtime.matrix.MetaData; import org.apache.sysml.runtime.matrix.sort.PickFromCompactInputFormat; @SuppressWarnings("rawtypes") public class InputInfo implements Serializable { private static final long serialVersionUID = 7059677437144672023L; public Class<? extends InputFormat> inputFormatClass; public Class<? extends Writable> inputKeyClass; public Class<? extends Writable> inputValueClass; public MetaData metadata=null; public InputInfo(Class<? extends InputFormat> formatCls, Class<? extends Writable> keyCls, Class<? extends Writable> valueCls) { inputFormatClass=formatCls; inputKeyClass=keyCls; inputValueClass=valueCls; } public void setMetaData(MetaData md) { metadata=md; } public static final InputInfo TextCellInputInfo=new InputInfo(TextInputFormat.class, LongWritable.class, Text.class); public static final InputInfo MatrixMarketInputInfo = new InputInfo (TextInputFormat.class, LongWritable.class, Text.class); public static final InputInfo BinaryCellInputInfo=new InputInfo(SequenceFileInputFormat.class, MatrixIndexes.class, MatrixCell.class); public static final InputInfo BinaryBlockInputInfo=new InputInfo( SequenceFileInputFormat.class, MatrixIndexes.class, MatrixBlock.class); public static final InputInfo BinaryBlockFrameInputInfo=new InputInfo( SequenceFileInputFormat.class, LongWritable.class, FrameBlock.class); // Format that denotes the input of a SORT job public static final InputInfo InputInfoForSort=new InputInfo(SequenceFileInputFormat.class, DoubleWritable.class, IntWritable.class); // Format that denotes the output of a SORT job public static final InputInfo InputInfoForSortOutput = new InputInfo(PickFromCompactInputFormat.class, DoubleWritable.class, IntWritable.class); public static final InputInfo WeightedPairInputInfo=new InputInfo(SequenceFileInputFormat.class, MatrixIndexes.class, WeightedPair.class); public static final InputInfo CSVInputInfo=new InputInfo(TextInputFormat.class, LongWritable.class, Text.class); public static OutputInfo getMatchingOutputInfo(InputInfo ii) throws DMLRuntimeException { if ( ii == InputInfo.BinaryBlockInputInfo ) return OutputInfo.BinaryBlockOutputInfo; else if ( ii == InputInfo.MatrixMarketInputInfo) return OutputInfo.MatrixMarketOutputInfo; else if ( ii == InputInfo.BinaryCellInputInfo ) return OutputInfo.BinaryCellOutputInfo; else if ( ii == InputInfo.TextCellInputInfo ) return OutputInfo.TextCellOutputInfo; else if ( ii == InputInfo.InputInfoForSort) return OutputInfo.OutputInfoForSortInput; else if ( ii == InputInfo.InputInfoForSortOutput) return OutputInfo.OutputInfoForSortOutput; else if ( ii == InputInfo.WeightedPairInputInfo) return OutputInfo.WeightedPairOutputInfo; else if ( ii == InputInfo.CSVInputInfo) return OutputInfo.CSVOutputInfo; else throw new DMLRuntimeException("Unrecognized output info: " + ii); } public static InputInfo stringToInputInfo(String str) { if ( str.equalsIgnoreCase("textcell")) { return TextCellInputInfo; } if ( str.equalsIgnoreCase("matrixmarket")) { return MatrixMarketInputInfo; } else if ( str.equalsIgnoreCase("binarycell")) { return BinaryCellInputInfo; } else if (str.equalsIgnoreCase("binaryblock")) { return BinaryBlockInputInfo; } else if ( str.equalsIgnoreCase("sort_input")) return InputInfoForSort; else if ( str.equalsIgnoreCase("sort_output")) return InputInfoForSortOutput; else if ( str.equalsIgnoreCase("weightedpair")) return WeightedPairInputInfo; else if ( str.equalsIgnoreCase("csv")) return CSVInputInfo; return null; } public static InputInfo stringExternalToInputInfo(String str) { if( DataExpression.FORMAT_TYPE_VALUE_TEXT.equals(str) ) return InputInfo.TextCellInputInfo; else if( DataExpression.FORMAT_TYPE_VALUE_MATRIXMARKET.equals(str) ) return InputInfo.MatrixMarketInputInfo; else if( DataExpression.FORMAT_TYPE_VALUE_CSV.equals(str) ) return InputInfo.CSVInputInfo; else if( DataExpression.FORMAT_TYPE_VALUE_BINARY.equals(str) ) return InputInfo.BinaryBlockInputInfo; return null; } public static String inputInfoToString (InputInfo ii) throws DMLRuntimeException { if ( ii == TextCellInputInfo ) return "textcell"; else if ( ii == BinaryCellInputInfo ) return "binarycell"; else if ( ii == BinaryBlockInputInfo ) return "binaryblock"; else if ( ii == InputInfoForSort ) return "sort_input"; else if ( ii == InputInfoForSortOutput) return "sort_output"; else if ( ii == WeightedPairInputInfo ) return "weightedpair"; else if ( ii == MatrixMarketInputInfo ) return "matrixmarket"; else if ( ii == CSVInputInfo ) return "csv"; else throw new DMLRuntimeException("Unrecognized inputInfo: " + ii); } }