blob: 24e94b3da17950464d6a9b11c347b2c20b41c8bf [file] [log] [blame]
/*
* 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.sysds.runtime.io;
import java.io.Serializable;
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.OutputFormat;
import org.apache.hadoop.mapred.SequenceFileInputFormat;
import org.apache.hadoop.mapred.SequenceFileOutputFormat;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.sysds.common.Types.DataType;
import org.apache.sysds.common.Types.FileFormat;
import org.apache.sysds.runtime.DMLRuntimeException;
import org.apache.sysds.runtime.data.TensorBlock;
import org.apache.sysds.runtime.data.TensorIndexes;
import org.apache.sysds.runtime.matrix.data.FrameBlock;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.data.MatrixIndexes;
import org.apache.sysds.runtime.meta.MetaData;
@SuppressWarnings("rawtypes")
public class InputOutputInfo implements Serializable
{
private static final long serialVersionUID = 7059677437144672023L;
public Class<? extends InputFormat> inputFormatClass;
public Class<? extends OutputFormat> outputFormatClass;
public Class<? extends Writable> keyClass;
public Class<? extends Writable> valueClass;
public MetaData metadata=null;
public InputOutputInfo(Class<? extends InputFormat> formatClsIn, Class<? extends OutputFormat> formatClsOut,
Class<? extends Writable> keyCls, Class<? extends Writable> valueCls)
{
inputFormatClass = formatClsIn;
outputFormatClass = formatClsOut;
keyClass = keyCls;
valueClass = valueCls;
}
public static final InputOutputInfo TextCellInputOutputInfo = new InputOutputInfo(
TextInputFormat.class, TextOutputFormat.class, LongWritable.class, Text.class);
public static final InputOutputInfo MatrixMarketInputOutputInfo = new InputOutputInfo(
TextInputFormat.class, TextOutputFormat.class, LongWritable.class, Text.class);
public static final InputOutputInfo BinaryBlockInputOutputInfo = new InputOutputInfo(
SequenceFileInputFormat.class, SequenceFileOutputFormat.class, MatrixIndexes.class, MatrixBlock.class);
public static final InputOutputInfo BinaryBlockFrameInputOutputInfo = new InputOutputInfo(
SequenceFileInputFormat.class, SequenceFileOutputFormat.class, LongWritable.class, FrameBlock.class);
public static final InputOutputInfo BinaryBlockTensorInputOutputInfo = new InputOutputInfo(
SequenceFileInputFormat.class, SequenceFileOutputFormat.class, TensorIndexes.class, TensorBlock.class);
public static final InputOutputInfo CSVInputOutputInfo = new InputOutputInfo(
TextInputFormat.class, TextOutputFormat.class, LongWritable.class, Text.class);
public static final InputOutputInfo LIBSVMInputOutputInfo = new InputOutputInfo(
TextInputFormat.class, TextOutputFormat.class, LongWritable.class, Text.class);
@SuppressWarnings("incomplete-switch")
public static InputOutputInfo get(DataType dt, FileFormat fmt) {
switch(fmt) {
case TEXT: return TextCellInputOutputInfo;
case MM: return MatrixMarketInputOutputInfo;
case CSV: return CSVInputOutputInfo;
case LIBSVM: return LIBSVMInputOutputInfo;
case BINARY: {
switch( dt ) {
case MATRIX: return BinaryBlockInputOutputInfo;
case FRAME: return BinaryBlockFrameInputOutputInfo;
case TENSOR: return BinaryBlockTensorInputOutputInfo;
}
}
}
throw new DMLRuntimeException(
"Could not obtain input/output info for format: " + dt.toString() + ", " + fmt.toString());
}
}