You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemds.apache.org by ja...@apache.org on 2022/05/22 01:36:11 UTC

[systemds] branch main updated: [SYSTEMDS-3381] Autogenerate java classes from proto definition with mvn

This is an automated email from the ASF dual-hosted git repository.

janardhan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git


The following commit(s) were added to refs/heads/main by this push:
     new 264de9b49f [SYSTEMDS-3381] Autogenerate java classes from proto definition with mvn
264de9b49f is described below

commit 264de9b49fa88497c5a730a20aa549534564a0bd
Author: Janardhan Pulivarthi <j1...@protonmail.com>
AuthorDate: Sun May 22 07:06:06 2022 +0530

    [SYSTEMDS-3381] Autogenerate java classes from proto definition with mvn
    
    * upgrade to protobuf 3.20.1
       see https://github.com/protocolbuffers/protobuf/releases/tag/v3.20.1
    * generate .java file
    * license exclude protobuf/*.java file
    * add a note on protoc binaries
    
    Closes #1620.
---
 pom.xml                                            |   32 +-
 .../org/apache/sysds/protobuf/SysdsProtos.java     | 6026 ++++++++++----------
 src/main/resources/protobuf/Frame.proto            |   41 +-
 3 files changed, 3020 insertions(+), 3079 deletions(-)

diff --git a/pom.xml b/pom.xml
index bfc79e3683..fc69f16f09 100644
--- a/pom.xml
+++ b/pom.xml
@@ -291,6 +291,32 @@
 				</executions>
 			</plugin>
 
+			<plugin> <!-- generate .java files from .proto -->
+				<groupId>com.github.os72</groupId>
+				<artifactId>protoc-jar-maven-plugin</artifactId>
+				<version>3.11.4</version>
+				<executions>
+					<execution>
+						<phase>generate-sources</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<!-- protoc binaries to be picked up from
+							  https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/ -->
+							<protocVersion>3.20.1</protocVersion>
+							<inputDirectories>
+								<include>src/main/resources/protobuf</include>
+							</inputDirectories>
+							<outputDirectory>src/main/java</outputDirectory>
+							<outputDirectories>
+								<include>src/main/java</include>
+							</outputDirectories>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
 
 			<plugin> <!-- unit tests -->
 				<groupId>org.apache.maven.plugins</groupId>
@@ -616,6 +642,8 @@
 								<!-- Generated antlr files -->
 								<exclude>src/main/java/*.tokens</exclude>
 								<exclude>**/*.interp</exclude>
+								<!-- Generated antlr files -->
+								<exclude>src/main/java/org/apache/sysds/protobuf/*.java</exclude>
 								<!-- Compiled ptx file from nvcc -->
 								<exclude>src/main/cuda/kernels/SystemDS.ptx</exclude>
 								<exclude>src/main/cuda/kernels/reduction.ptx</exclude>
@@ -1138,13 +1166,13 @@
 		<dependency>
 			<groupId>com.google.protobuf</groupId>
 			<artifactId>protobuf-java</artifactId>
-			<version>3.12.2</version>
+			<version>3.20.1</version>
 		</dependency>
 
 		<dependency>
 			<groupId>com.google.protobuf</groupId>
 			<artifactId>protobuf-java-util</artifactId>
-			<version>3.12.2</version>
+			<version>3.20.1</version>
 		</dependency>
 
 		<dependency>
diff --git a/src/main/java/org/apache/sysds/protobuf/SysdsProtos.java b/src/main/java/org/apache/sysds/protobuf/SysdsProtos.java
index e1ad27492a..959bf4f23c 100644
--- a/src/main/java/org/apache/sysds/protobuf/SysdsProtos.java
+++ b/src/main/java/org/apache/sysds/protobuf/SysdsProtos.java
@@ -1,3064 +1,2972 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: src/main/resources/protobuf/Frame.proto
-/*
- * 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.
- */
+// source: Frame.proto
+
 package org.apache.sysds.protobuf;
 
-@SuppressWarnings({"unused","unchecked"})
 public final class SysdsProtos {
-	private static final com.google.protobuf.Descriptors.Descriptor internal_static_sysds_Frame_descriptor;
-	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_sysds_Frame_fieldAccessorTable;
-	private static final com.google.protobuf.Descriptors.Descriptor internal_static_sysds_Row_descriptor;
-	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_sysds_Row_fieldAccessorTable;
-	private static final com.google.protobuf.Descriptors.Descriptor internal_static_sysds_Schema_descriptor;
-	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_sysds_Schema_fieldAccessorTable;
-	private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
-
-	static {
-		java.lang.String[] descriptorData = {"\n\'src/main/resources/protobuf/Frame.prot"
-			+ "o\022\005sysds\"!\n\005Frame\022\030\n\004rows\030\001 \003(\0132\n.sysds."
-			+ "Row\"V\n\003Row\022\024\n\014column_names\030\001 \003(\t\022\023\n\013colu"
-			+ "mn_data\030\002 \003(\t\022$\n\rcolumn_schema\030\003 \003(\0132\r.s"
-			+ "ysds.Schema\"\221\001\n\006Schema\022*\n\tvalueType\030\001 \003("
-			+ "\0162\027.sysds.Schema.ValueType\"[\n\tValueType\022"
-			+ "\010\n\004FP32\020\000\022\010\n\004FP64\020\001\022\t\n\005INT32\020\002\022\t\n\005INT64\020"
-			+ "\003\022\013\n\007BOOLEAN\020\004\022\n\n\006STRING\020\005\022\013\n\007UNKNOWN\020\006B"
-			+ "*\n\031org.apache.sysds.protobufB\013SysdsProto" + "sP\000b\006proto3"};
-		descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData,
-			new com.google.protobuf.Descriptors.FileDescriptor[] {});
-		internal_static_sysds_Frame_descriptor = getDescriptor().getMessageTypes().get(0);
-		internal_static_sysds_Frame_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-			internal_static_sysds_Frame_descriptor, new java.lang.String[] {"Rows",});
-		internal_static_sysds_Row_descriptor = getDescriptor().getMessageTypes().get(1);
-		internal_static_sysds_Row_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-			internal_static_sysds_Row_descriptor,
-			new java.lang.String[] {"ColumnNames", "ColumnData", "ColumnSchema",});
-		internal_static_sysds_Schema_descriptor = getDescriptor().getMessageTypes().get(2);
-		internal_static_sysds_Schema_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-			internal_static_sysds_Schema_descriptor, new java.lang.String[] {"ValueType",});
-	}
-
-	private SysdsProtos() {
-	}
-
-	public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {
-	}
-
-	public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
-		registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
-	}
-
-	public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
-		return descriptor;
-	}
-
-	public interface FrameOrBuilder extends
-		// @@protoc_insertion_point(interface_extends:sysds.Frame)
-		com.google.protobuf.MessageOrBuilder {
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> getRowsList();
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		org.apache.sysds.protobuf.SysdsProtos.Row getRows(int index);
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		int getRowsCount();
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> getRowsOrBuilderList();
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder getRowsOrBuilder(int index);
-	}
-
-	public interface RowOrBuilder extends
-		// @@protoc_insertion_point(interface_extends:sysds.Row)
-		com.google.protobuf.MessageOrBuilder {
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @return A list containing the columnNames.
-		 */
-		java.util.List<java.lang.String> getColumnNamesList();
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @return The count of columnNames.
-		 */
-		int getColumnNamesCount();
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @param index The index of the element to return.
-		 * @return The columnNames at the given index.
-		 */
-		java.lang.String getColumnNames(int index);
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @param index The index of the value to return.
-		 * @return The bytes of the columnNames at the given index.
-		 */
-		com.google.protobuf.ByteString getColumnNamesBytes(int index);
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @return A list containing the columnData.
-		 */
-		java.util.List<java.lang.String> getColumnDataList();
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @return The count of columnData.
-		 */
-		int getColumnDataCount();
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @param index The index of the element to return.
-		 * @return The columnData at the given index.
-		 */
-		java.lang.String getColumnData(int index);
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @param index The index of the value to return.
-		 * @return The bytes of the columnData at the given index.
-		 */
-		com.google.protobuf.ByteString getColumnDataBytes(int index);
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> getColumnSchemaList();
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		org.apache.sysds.protobuf.SysdsProtos.Schema getColumnSchema(int index);
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		int getColumnSchemaCount();
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> getColumnSchemaOrBuilderList();
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder getColumnSchemaOrBuilder(int index);
-	}
-
-	public interface SchemaOrBuilder extends
-		// @@protoc_insertion_point(interface_extends:sysds.Schema)
-		com.google.protobuf.MessageOrBuilder {
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @return A list containing the valueType.
-		 */
-		java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> getValueTypeList();
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @return The count of valueType.
-		 */
-		int getValueTypeCount();
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @param index The index of the element to return.
-		 * @return The valueType at the given index.
-		 */
-		org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType getValueType(int index);
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @return A list containing the enum numeric values on the wire for valueType.
-		 */
-		java.util.List<java.lang.Integer> getValueTypeValueList();
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @param index The index of the value to return.
-		 * @return The enum numeric value on the wire of valueType at the given index.
-		 */
-		int getValueTypeValue(int index);
-	}
-
-	/**
-	 * Protobuf type {@code sysds.Frame}
-	 */
-	public static final class Frame extends com.google.protobuf.GeneratedMessageV3 implements
-		// @@protoc_insertion_point(message_implements:sysds.Frame)
-		FrameOrBuilder {
-		public static final int ROWS_FIELD_NUMBER = 1;
-		private static final long serialVersionUID = 0L;
-		// @@protoc_insertion_point(class_scope:sysds.Frame)
-		private static final org.apache.sysds.protobuf.SysdsProtos.Frame DEFAULT_INSTANCE;
-		private static final com.google.protobuf.Parser<Frame> PARSER = new com.google.protobuf.AbstractParser<Frame>() {
-			@java.lang.Override
-			public Frame parsePartialFrom(com.google.protobuf.CodedInputStream input,
-				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-				throws com.google.protobuf.InvalidProtocolBufferException {
-				return new Frame(input, extensionRegistry);
-			}
-		};
-
-		static {
-			DEFAULT_INSTANCE = new org.apache.sysds.protobuf.SysdsProtos.Frame();
-		}
-
-		private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> rows_;
-		private byte memoizedIsInitialized = -1;
-
-		// Use Frame.newBuilder() to construct.
-		private Frame(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-			super(builder);
-		}
-
-		private Frame() {
-			rows_ = java.util.Collections.emptyList();
-		}
-
-		private Frame(com.google.protobuf.CodedInputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			this();
-			if(extensionRegistry == null) {
-				throw new java.lang.NullPointerException();
-			}
-			int mutable_bitField0_ = 0;
-			com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
-				.newBuilder();
-			try {
-				boolean done = false;
-				while(!done) {
-					int tag = input.readTag();
-					switch(tag) {
-						case 0:
-							done = true;
-							break;
-						case 10: {
-							if(!((mutable_bitField0_ & 0x00000001) != 0)) {
-								rows_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Row>();
-								mutable_bitField0_ |= 0x00000001;
-							}
-							rows_.add(input.readMessage(org.apache.sysds.protobuf.SysdsProtos.Row.parser(),
-								extensionRegistry));
-							break;
-						}
-						default: {
-							if(!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
-								done = true;
-							}
-							break;
-						}
-					}
-				}
-			}
-			catch(com.google.protobuf.InvalidProtocolBufferException e) {
-				throw e.setUnfinishedMessage(this);
-			}
-			catch(java.io.IOException e) {
-				throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
-			}
-			finally {
-				if(((mutable_bitField0_ & 0x00000001) != 0)) {
-					rows_ = java.util.Collections.unmodifiableList(rows_);
-				}
-				this.unknownFields = unknownFields.build();
-				makeExtensionsImmutable();
-			}
-		}
-
-		public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-			return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_descriptor;
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(java.nio.ByteBuffer data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(java.nio.ByteBuffer data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(com.google.protobuf.ByteString data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(com.google.protobuf.ByteString data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(byte[] data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(byte[] data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(java.io.InputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(java.io.InputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseDelimitedFrom(java.io.InputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseDelimitedFrom(java.io.InputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3
-				.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(com.google.protobuf.CodedInputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(com.google.protobuf.CodedInputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static Builder newBuilder() {
-			return DEFAULT_INSTANCE.toBuilder();
-		}
-
-		public static Builder newBuilder(org.apache.sysds.protobuf.SysdsProtos.Frame prototype) {
-			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Frame getDefaultInstance() {
-			return DEFAULT_INSTANCE;
-		}
-
-		public static com.google.protobuf.Parser<Frame> parser() {
-			return PARSER;
-		}
-
-		@java.lang.Override
-		@SuppressWarnings({"unused"})
-		protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-			return new Frame();
-		}
-
-		@java.lang.Override
-		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-			return this.unknownFields;
-		}
-
-		@java.lang.Override
-		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-			return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_fieldAccessorTable
-				.ensureFieldAccessorsInitialized(org.apache.sysds.protobuf.SysdsProtos.Frame.class,
-					org.apache.sysds.protobuf.SysdsProtos.Frame.Builder.class);
-		}
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		@java.lang.Override
-		public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> getRowsList() {
-			return rows_;
-		}
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		@java.lang.Override
-		public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> getRowsOrBuilderList() {
-			return rows_;
-		}
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		@java.lang.Override
-		public int getRowsCount() {
-			return rows_.size();
-		}
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.Row getRows(int index) {
-			return rows_.get(index);
-		}
-
-		/**
-		 * <code>repeated .sysds.Row rows = 1;</code>
-		 */
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder getRowsOrBuilder(int index) {
-			return rows_.get(index);
-		}
-
-		@java.lang.Override
-		public final boolean isInitialized() {
-			byte isInitialized = memoizedIsInitialized;
-			if(isInitialized == 1)
-				return true;
-			if(isInitialized == 0)
-				return false;
-
-			memoizedIsInitialized = 1;
-			return true;
-		}
-
-		@java.lang.Override
-		public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-			for(int i = 0; i < rows_.size(); i++) {
-				output.writeMessage(1, rows_.get(i));
-			}
-			unknownFields.writeTo(output);
-		}
-
-		@java.lang.Override
-		public int getSerializedSize() {
-			int size = memoizedSize;
-			if(size != -1)
-				return size;
-
-			size = 0;
-			for(int i = 0; i < rows_.size(); i++) {
-				size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, rows_.get(i));
-			}
-			size += unknownFields.getSerializedSize();
-			memoizedSize = size;
-			return size;
-		}
-
-		@java.lang.Override
-		public boolean equals(final java.lang.Object obj) {
-			if(obj == this) {
-				return true;
-			}
-			if(!(obj instanceof org.apache.sysds.protobuf.SysdsProtos.Frame)) {
-				return super.equals(obj);
-			}
-			org.apache.sysds.protobuf.SysdsProtos.Frame other = (org.apache.sysds.protobuf.SysdsProtos.Frame) obj;
-
-			if(!getRowsList().equals(other.getRowsList()))
-				return false;
-			if(!unknownFields.equals(other.unknownFields))
-				return false;
-			return true;
-		}
-
-		@java.lang.Override
-		public int hashCode() {
-			if(memoizedHashCode != 0) {
-				return memoizedHashCode;
-			}
-			int hash = 41;
-			hash = (19 * hash) + getDescriptor().hashCode();
-			if(getRowsCount() > 0) {
-				hash = (37 * hash) + ROWS_FIELD_NUMBER;
-				hash = (53 * hash) + getRowsList().hashCode();
-			}
-			hash = (29 * hash) + unknownFields.hashCode();
-			memoizedHashCode = hash;
-			return hash;
-		}
-
-		@java.lang.Override
-		public Builder newBuilderForType() {
-			return newBuilder();
-		}
-
-		@java.lang.Override
-		public Builder toBuilder() {
-			return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
-		}
-
-		@java.lang.Override
-		protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-			Builder builder = new Builder(parent);
-			return builder;
-		}
-
-		@java.lang.Override
-		public com.google.protobuf.Parser<Frame> getParserForType() {
-			return PARSER;
-		}
-
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.Frame getDefaultInstanceForType() {
-			return DEFAULT_INSTANCE;
-		}
-
-		/**
-		 * Protobuf type {@code sysds.Frame}
-		 */
-		public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-			// @@protoc_insertion_point(builder_implements:sysds.Frame)
-			org.apache.sysds.protobuf.SysdsProtos.FrameOrBuilder {
-			private int bitField0_;
-			private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> rows_ = java.util.Collections.emptyList();
-			private com.google.protobuf.RepeatedFieldBuilderV3<org.apache.sysds.protobuf.SysdsProtos.Row, org.apache.sysds.protobuf.SysdsProtos.Row.Builder, org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> rowsBuilder_;
-
-			// Construct using org.apache.sysds.protobuf.SysdsProtos.Frame.newBuilder()
-			private Builder() {
-				maybeForceBuilderInitialization();
-			}
-
-			private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-				super(parent);
-				maybeForceBuilderInitialization();
-			}
-
-			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_descriptor;
-			}
-
-			@java.lang.Override
-			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_fieldAccessorTable
-					.ensureFieldAccessorsInitialized(org.apache.sysds.protobuf.SysdsProtos.Frame.class,
-						org.apache.sysds.protobuf.SysdsProtos.Frame.Builder.class);
-			}
-
-			private void maybeForceBuilderInitialization() {
-				if(com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-					getRowsFieldBuilder();
-				}
-			}
-
-			@java.lang.Override
-			public Builder clear() {
-				super.clear();
-				if(rowsBuilder_ == null) {
-					rows_ = java.util.Collections.emptyList();
-					bitField0_ = (bitField0_ & ~0x00000001);
-				}
-				else {
-					rowsBuilder_.clear();
-				}
-				return this;
-			}
-
-			@java.lang.Override
-			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_descriptor;
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Frame getDefaultInstanceForType() {
-				return org.apache.sysds.protobuf.SysdsProtos.Frame.getDefaultInstance();
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Frame build() {
-				org.apache.sysds.protobuf.SysdsProtos.Frame result = buildPartial();
-				if(!result.isInitialized()) {
-					throw newUninitializedMessageException(result);
-				}
-				return result;
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Frame buildPartial() {
-				org.apache.sysds.protobuf.SysdsProtos.Frame result = new org.apache.sysds.protobuf.SysdsProtos.Frame(
-					this);
-				int from_bitField0_ = bitField0_;
-				if(rowsBuilder_ == null) {
-					if(((bitField0_ & 0x00000001) != 0)) {
-						rows_ = java.util.Collections.unmodifiableList(rows_);
-						bitField0_ = (bitField0_ & ~0x00000001);
-					}
-					result.rows_ = rows_;
-				}
-				else {
-					result.rows_ = rowsBuilder_.build();
-				}
-				onBuilt();
-				return result;
-			}
-
-			@java.lang.Override
-			public Builder clone() {
-				return super.clone();
-			}
-
-			@java.lang.Override
-			public Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-				return super.setField(field, value);
-			}
-
-			@java.lang.Override
-			public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
-				return super.clearField(field);
-			}
-
-			@java.lang.Override
-			public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-				return super.clearOneof(oneof);
-			}
-
-			@java.lang.Override
-			public Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, int index,
-				java.lang.Object value) {
-				return super.setRepeatedField(field, index, value);
-			}
-
-			@java.lang.Override
-			public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field,
-				java.lang.Object value) {
-				return super.addRepeatedField(field, value);
-			}
-
-			@java.lang.Override
-			public Builder mergeFrom(com.google.protobuf.Message other) {
-				if(other instanceof org.apache.sysds.protobuf.SysdsProtos.Frame) {
-					return mergeFrom((org.apache.sysds.protobuf.SysdsProtos.Frame) other);
-				}
-				else {
-					super.mergeFrom(other);
-					return this;
-				}
-			}
-
-			public Builder mergeFrom(org.apache.sysds.protobuf.SysdsProtos.Frame other) {
-				if(other == org.apache.sysds.protobuf.SysdsProtos.Frame.getDefaultInstance())
-					return this;
-				if(rowsBuilder_ == null) {
-					if(!other.rows_.isEmpty()) {
-						if(rows_.isEmpty()) {
-							rows_ = other.rows_;
-							bitField0_ = (bitField0_ & ~0x00000001);
-						}
-						else {
-							ensureRowsIsMutable();
-							rows_.addAll(other.rows_);
-						}
-						onChanged();
-					}
-				}
-				else {
-					if(!other.rows_.isEmpty()) {
-						if(rowsBuilder_.isEmpty()) {
-							rowsBuilder_.dispose();
-							rowsBuilder_ = null;
-							rows_ = other.rows_;
-							bitField0_ = (bitField0_ & ~0x00000001);
-							rowsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getRowsFieldBuilder() : null;
-						}
-						else {
-							rowsBuilder_.addAllMessages(other.rows_);
-						}
-					}
-				}
-				this.mergeUnknownFields(other.unknownFields);
-				onChanged();
-				return this;
-			}
-
-			@java.lang.Override
-			public final boolean isInitialized() {
-				return true;
-			}
-
-			@java.lang.Override
-			public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
-				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-				org.apache.sysds.protobuf.SysdsProtos.Frame parsedMessage = null;
-				try {
-					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-				}
-				catch(com.google.protobuf.InvalidProtocolBufferException e) {
-					parsedMessage = (org.apache.sysds.protobuf.SysdsProtos.Frame) e.getUnfinishedMessage();
-					throw e.unwrapIOException();
-				}
-				finally {
-					if(parsedMessage != null) {
-						mergeFrom(parsedMessage);
-					}
-				}
-				return this;
-			}
-
-			private void ensureRowsIsMutable() {
-				if(!((bitField0_ & 0x00000001) != 0)) {
-					rows_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Row>(rows_);
-					bitField0_ |= 0x00000001;
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> getRowsList() {
-				if(rowsBuilder_ == null) {
-					return java.util.Collections.unmodifiableList(rows_);
-				}
-				else {
-					return rowsBuilder_.getMessageList();
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public int getRowsCount() {
-				if(rowsBuilder_ == null) {
-					return rows_.size();
-				}
-				else {
-					return rowsBuilder_.getCount();
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Row getRows(int index) {
-				if(rowsBuilder_ == null) {
-					return rows_.get(index);
-				}
-				else {
-					return rowsBuilder_.getMessage(index);
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder setRows(int index, org.apache.sysds.protobuf.SysdsProtos.Row value) {
-				if(rowsBuilder_ == null) {
-					if(value == null) {
-						throw new NullPointerException();
-					}
-					ensureRowsIsMutable();
-					rows_.set(index, value);
-					onChanged();
-				}
-				else {
-					rowsBuilder_.setMessage(index, value);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder setRows(int index, org.apache.sysds.protobuf.SysdsProtos.Row.Builder builderForValue) {
-				if(rowsBuilder_ == null) {
-					ensureRowsIsMutable();
-					rows_.set(index, builderForValue.build());
-					onChanged();
-				}
-				else {
-					rowsBuilder_.setMessage(index, builderForValue.build());
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder addRows(org.apache.sysds.protobuf.SysdsProtos.Row value) {
-				if(rowsBuilder_ == null) {
-					if(value == null) {
-						throw new NullPointerException();
-					}
-					ensureRowsIsMutable();
-					rows_.add(value);
-					onChanged();
-				}
-				else {
-					rowsBuilder_.addMessage(value);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder addRows(int index, org.apache.sysds.protobuf.SysdsProtos.Row value) {
-				if(rowsBuilder_ == null) {
-					if(value == null) {
-						throw new NullPointerException();
-					}
-					ensureRowsIsMutable();
-					rows_.add(index, value);
-					onChanged();
-				}
-				else {
-					rowsBuilder_.addMessage(index, value);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder addRows(org.apache.sysds.protobuf.SysdsProtos.Row.Builder builderForValue) {
-				if(rowsBuilder_ == null) {
-					ensureRowsIsMutable();
-					rows_.add(builderForValue.build());
-					onChanged();
-				}
-				else {
-					rowsBuilder_.addMessage(builderForValue.build());
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder addRows(int index, org.apache.sysds.protobuf.SysdsProtos.Row.Builder builderForValue) {
-				if(rowsBuilder_ == null) {
-					ensureRowsIsMutable();
-					rows_.add(index, builderForValue.build());
-					onChanged();
-				}
-				else {
-					rowsBuilder_.addMessage(index, builderForValue.build());
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder addAllRows(java.lang.Iterable<? extends org.apache.sysds.protobuf.SysdsProtos.Row> values) {
-				if(rowsBuilder_ == null) {
-					ensureRowsIsMutable();
-					com.google.protobuf.AbstractMessageLite.Builder.addAll(values, rows_);
-					onChanged();
-				}
-				else {
-					rowsBuilder_.addAllMessages(values);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder clearRows() {
-				if(rowsBuilder_ == null) {
-					rows_ = java.util.Collections.emptyList();
-					bitField0_ = (bitField0_ & ~0x00000001);
-					onChanged();
-				}
-				else {
-					rowsBuilder_.clear();
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public Builder removeRows(int index) {
-				if(rowsBuilder_ == null) {
-					ensureRowsIsMutable();
-					rows_.remove(index);
-					onChanged();
-				}
-				else {
-					rowsBuilder_.remove(index);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Row.Builder getRowsBuilder(int index) {
-				return getRowsFieldBuilder().getBuilder(index);
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder getRowsOrBuilder(int index) {
-				if(rowsBuilder_ == null) {
-					return rows_.get(index);
-				}
-				else {
-					return rowsBuilder_.getMessageOrBuilder(index);
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> getRowsOrBuilderList() {
-				if(rowsBuilder_ != null) {
-					return rowsBuilder_.getMessageOrBuilderList();
-				}
-				else {
-					return java.util.Collections.unmodifiableList(rows_);
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Row.Builder addRowsBuilder() {
-				return getRowsFieldBuilder().addBuilder(org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance());
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Row.Builder addRowsBuilder(int index) {
-				return getRowsFieldBuilder().addBuilder(index,
-					org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance());
-			}
-
-			/**
-			 * <code>repeated .sysds.Row rows = 1;</code>
-			 */
-			public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row.Builder> getRowsBuilderList() {
-				return getRowsFieldBuilder().getBuilderList();
-			}
-
-			private com.google.protobuf.RepeatedFieldBuilderV3<org.apache.sysds.protobuf.SysdsProtos.Row, org.apache.sysds.protobuf.SysdsProtos.Row.Builder, org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> getRowsFieldBuilder() {
-				if(rowsBuilder_ == null) {
-					rowsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<org.apache.sysds.protobuf.SysdsProtos.Row, org.apache.sysds.protobuf.SysdsProtos.Row.Builder, org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder>(
-						rows_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
-					rows_ = null;
-				}
-				return rowsBuilder_;
-			}
-
-			@java.lang.Override
-			public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
-				return super.setUnknownFields(unknownFields);
-			}
-
-			@java.lang.Override
-			public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
-				return super.mergeUnknownFields(unknownFields);
-			}
-
-			// @@protoc_insertion_point(builder_scope:sysds.Frame)
-		}
-
-	}
-
-	/**
-	 * Protobuf type {@code sysds.Row}
-	 */
-	public static final class Row extends com.google.protobuf.GeneratedMessageV3 implements
-		// @@protoc_insertion_point(message_implements:sysds.Row)
-		RowOrBuilder {
-		public static final int COLUMN_NAMES_FIELD_NUMBER = 1;
-		public static final int COLUMN_DATA_FIELD_NUMBER = 2;
-		public static final int COLUMN_SCHEMA_FIELD_NUMBER = 3;
-		private static final long serialVersionUID = 0L;
-		// @@protoc_insertion_point(class_scope:sysds.Row)
-		private static final org.apache.sysds.protobuf.SysdsProtos.Row DEFAULT_INSTANCE;
-		private static final com.google.protobuf.Parser<Row> PARSER = new com.google.protobuf.AbstractParser<Row>() {
-			@java.lang.Override
-			public Row parsePartialFrom(com.google.protobuf.CodedInputStream input,
-				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-				throws com.google.protobuf.InvalidProtocolBufferException {
-				return new Row(input, extensionRegistry);
-			}
-		};
-
-		static {
-			DEFAULT_INSTANCE = new org.apache.sysds.protobuf.SysdsProtos.Row();
-		}
-
-		private com.google.protobuf.LazyStringList columnNames_;
-		private com.google.protobuf.LazyStringList columnData_;
-		private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> columnSchema_;
-		private byte memoizedIsInitialized = -1;
-
-		// Use Row.newBuilder() to construct.
-		private Row(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-			super(builder);
-		}
-
-		private Row() {
-			columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-			columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-			columnSchema_ = java.util.Collections.emptyList();
-		}
-
-		private Row(com.google.protobuf.CodedInputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			this();
-			if(extensionRegistry == null) {
-				throw new java.lang.NullPointerException();
-			}
-			int mutable_bitField0_ = 0;
-			com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
-				.newBuilder();
-			try {
-				boolean done = false;
-				while(!done) {
-					int tag = input.readTag();
-					switch(tag) {
-						case 0:
-							done = true;
-							break;
-						case 10: {
-							java.lang.String s = input.readStringRequireUtf8();
-							if(!((mutable_bitField0_ & 0x00000001) != 0)) {
-								columnNames_ = new com.google.protobuf.LazyStringArrayList();
-								mutable_bitField0_ |= 0x00000001;
-							}
-							columnNames_.add(s);
-							break;
-						}
-						case 18: {
-							java.lang.String s = input.readStringRequireUtf8();
-							if(!((mutable_bitField0_ & 0x00000002) != 0)) {
-								columnData_ = new com.google.protobuf.LazyStringArrayList();
-								mutable_bitField0_ |= 0x00000002;
-							}
-							columnData_.add(s);
-							break;
-						}
-						case 26: {
-							if(!((mutable_bitField0_ & 0x00000004) != 0)) {
-								columnSchema_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Schema>();
-								mutable_bitField0_ |= 0x00000004;
-							}
-							columnSchema_.add(input.readMessage(org.apache.sysds.protobuf.SysdsProtos.Schema.parser(),
-								extensionRegistry));
-							break;
-						}
-						default: {
-							if(!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
-								done = true;
-							}
-							break;
-						}
-					}
-				}
-			}
-			catch(com.google.protobuf.InvalidProtocolBufferException e) {
-				throw e.setUnfinishedMessage(this);
-			}
-			catch(java.io.IOException e) {
-				throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
-			}
-			finally {
-				if(((mutable_bitField0_ & 0x00000001) != 0)) {
-					columnNames_ = columnNames_.getUnmodifiableView();
-				}
-				if(((mutable_bitField0_ & 0x00000002) != 0)) {
-					columnData_ = columnData_.getUnmodifiableView();
-				}
-				if(((mutable_bitField0_ & 0x00000004) != 0)) {
-					columnSchema_ = java.util.Collections.unmodifiableList(columnSchema_);
-				}
-				this.unknownFields = unknownFields.build();
-				makeExtensionsImmutable();
-			}
-		}
-
-		public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-			return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_descriptor;
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(java.nio.ByteBuffer data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(java.nio.ByteBuffer data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(com.google.protobuf.ByteString data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(com.google.protobuf.ByteString data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(byte[] data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(byte[] data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(java.io.InputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(java.io.InputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseDelimitedFrom(java.io.InputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseDelimitedFrom(java.io.InputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3
-				.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(com.google.protobuf.CodedInputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(com.google.protobuf.CodedInputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static Builder newBuilder() {
-			return DEFAULT_INSTANCE.toBuilder();
-		}
-
-		public static Builder newBuilder(org.apache.sysds.protobuf.SysdsProtos.Row prototype) {
-			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Row getDefaultInstance() {
-			return DEFAULT_INSTANCE;
-		}
-
-		public static com.google.protobuf.Parser<Row> parser() {
-			return PARSER;
-		}
-
-		@java.lang.Override
-		@SuppressWarnings({"unused"})
-		protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-			return new Row();
-		}
-
-		@java.lang.Override
-		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-			return this.unknownFields;
-		}
-
-		@java.lang.Override
-		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-			return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_fieldAccessorTable
-				.ensureFieldAccessorsInitialized(org.apache.sysds.protobuf.SysdsProtos.Row.class,
-					org.apache.sysds.protobuf.SysdsProtos.Row.Builder.class);
-		}
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @return A list containing the columnNames.
-		 */
-		public com.google.protobuf.ProtocolStringList getColumnNamesList() {
-			return columnNames_;
-		}
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @return The count of columnNames.
-		 */
-		public int getColumnNamesCount() {
-			return columnNames_.size();
-		}
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @param index The index of the element to return.
-		 * @return The columnNames at the given index.
-		 */
-		public java.lang.String getColumnNames(int index) {
-			return columnNames_.get(index);
-		}
-
-		/**
-		 * <code>repeated string column_names = 1;</code>
-		 *
-		 * @param index The index of the value to return.
-		 * @return The bytes of the columnNames at the given index.
-		 */
-		public com.google.protobuf.ByteString getColumnNamesBytes(int index) {
-			return columnNames_.getByteString(index);
-		}
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @return A list containing the columnData.
-		 */
-		public com.google.protobuf.ProtocolStringList getColumnDataList() {
-			return columnData_;
-		}
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @return The count of columnData.
-		 */
-		public int getColumnDataCount() {
-			return columnData_.size();
-		}
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @param index The index of the element to return.
-		 * @return The columnData at the given index.
-		 */
-		public java.lang.String getColumnData(int index) {
-			return columnData_.get(index);
-		}
-
-		/**
-		 * <code>repeated string column_data = 2;</code>
-		 *
-		 * @param index The index of the value to return.
-		 * @return The bytes of the columnData at the given index.
-		 */
-		public com.google.protobuf.ByteString getColumnDataBytes(int index) {
-			return columnData_.getByteString(index);
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		@java.lang.Override
-		public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> getColumnSchemaList() {
-			return columnSchema_;
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		@java.lang.Override
-		public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> getColumnSchemaOrBuilderList() {
-			return columnSchema_;
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		@java.lang.Override
-		public int getColumnSchemaCount() {
-			return columnSchema_.size();
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.Schema getColumnSchema(int index) {
-			return columnSchema_.get(index);
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema column_schema = 3;</code>
-		 */
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder getColumnSchemaOrBuilder(int index) {
-			return columnSchema_.get(index);
-		}
-
-		@java.lang.Override
-		public final boolean isInitialized() {
-			byte isInitialized = memoizedIsInitialized;
-			if(isInitialized == 1)
-				return true;
-			if(isInitialized == 0)
-				return false;
-
-			memoizedIsInitialized = 1;
-			return true;
-		}
-
-		@java.lang.Override
-		public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-			for(int i = 0; i < columnNames_.size(); i++) {
-				com.google.protobuf.GeneratedMessageV3.writeString(output, 1, columnNames_.getRaw(i));
-			}
-			for(int i = 0; i < columnData_.size(); i++) {
-				com.google.protobuf.GeneratedMessageV3.writeString(output, 2, columnData_.getRaw(i));
-			}
-			for(int i = 0; i < columnSchema_.size(); i++) {
-				output.writeMessage(3, columnSchema_.get(i));
-			}
-			unknownFields.writeTo(output);
-		}
-
-		@java.lang.Override
-		public int getSerializedSize() {
-			int size = memoizedSize;
-			if(size != -1)
-				return size;
-
-			size = 0;
-			{
-				int dataSize = 0;
-				for(int i = 0; i < columnNames_.size(); i++) {
-					dataSize += computeStringSizeNoTag(columnNames_.getRaw(i));
-				}
-				size += dataSize;
-				size += 1 * getColumnNamesList().size();
-			}
-			{
-				int dataSize = 0;
-				for(int i = 0; i < columnData_.size(); i++) {
-					dataSize += computeStringSizeNoTag(columnData_.getRaw(i));
-				}
-				size += dataSize;
-				size += 1 * getColumnDataList().size();
-			}
-			for(int i = 0; i < columnSchema_.size(); i++) {
-				size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, columnSchema_.get(i));
-			}
-			size += unknownFields.getSerializedSize();
-			memoizedSize = size;
-			return size;
-		}
-
-		@java.lang.Override
-		public boolean equals(final java.lang.Object obj) {
-			if(obj == this) {
-				return true;
-			}
-			if(!(obj instanceof org.apache.sysds.protobuf.SysdsProtos.Row)) {
-				return super.equals(obj);
-			}
-			org.apache.sysds.protobuf.SysdsProtos.Row other = (org.apache.sysds.protobuf.SysdsProtos.Row) obj;
-
-			if(!getColumnNamesList().equals(other.getColumnNamesList()))
-				return false;
-			if(!getColumnDataList().equals(other.getColumnDataList()))
-				return false;
-			if(!getColumnSchemaList().equals(other.getColumnSchemaList()))
-				return false;
-			if(!unknownFields.equals(other.unknownFields))
-				return false;
-			return true;
-		}
-
-		@java.lang.Override
-		public int hashCode() {
-			if(memoizedHashCode != 0) {
-				return memoizedHashCode;
-			}
-			int hash = 41;
-			hash = (19 * hash) + getDescriptor().hashCode();
-			if(getColumnNamesCount() > 0) {
-				hash = (37 * hash) + COLUMN_NAMES_FIELD_NUMBER;
-				hash = (53 * hash) + getColumnNamesList().hashCode();
-			}
-			if(getColumnDataCount() > 0) {
-				hash = (37 * hash) + COLUMN_DATA_FIELD_NUMBER;
-				hash = (53 * hash) + getColumnDataList().hashCode();
-			}
-			if(getColumnSchemaCount() > 0) {
-				hash = (37 * hash) + COLUMN_SCHEMA_FIELD_NUMBER;
-				hash = (53 * hash) + getColumnSchemaList().hashCode();
-			}
-			hash = (29 * hash) + unknownFields.hashCode();
-			memoizedHashCode = hash;
-			return hash;
-		}
-
-		@java.lang.Override
-		public Builder newBuilderForType() {
-			return newBuilder();
-		}
-
-		@java.lang.Override
-		public Builder toBuilder() {
-			return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
-		}
-
-		@java.lang.Override
-		protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-			Builder builder = new Builder(parent);
-			return builder;
-		}
-
-		@java.lang.Override
-		public com.google.protobuf.Parser<Row> getParserForType() {
-			return PARSER;
-		}
-
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.Row getDefaultInstanceForType() {
-			return DEFAULT_INSTANCE;
-		}
-
-		/**
-		 * Protobuf type {@code sysds.Row}
-		 */
-		public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-			// @@protoc_insertion_point(builder_implements:sysds.Row)
-			org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder {
-			private int bitField0_;
-			private com.google.protobuf.LazyStringList columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-			private com.google.protobuf.LazyStringList columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-			private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> columnSchema_ = java.util.Collections
-				.emptyList();
-			private com.google.protobuf.RepeatedFieldBuilderV3<org.apache.sysds.protobuf.SysdsProtos.Schema, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder, org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> columnSchemaBuilder_;
-
-			// Construct using org.apache.sysds.protobuf.SysdsProtos.Row.newBuilder()
-			private Builder() {
-				maybeForceBuilderInitialization();
-			}
-
-			private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-				super(parent);
-				maybeForceBuilderInitialization();
-			}
-
-			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_descriptor;
-			}
-
-			@java.lang.Override
-			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_fieldAccessorTable
-					.ensureFieldAccessorsInitialized(org.apache.sysds.protobuf.SysdsProtos.Row.class,
-						org.apache.sysds.protobuf.SysdsProtos.Row.Builder.class);
-			}
-
-			private void maybeForceBuilderInitialization() {
-				if(com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-					getColumnSchemaFieldBuilder();
-				}
-			}
-
-			@java.lang.Override
-			public Builder clear() {
-				super.clear();
-				columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-				bitField0_ = (bitField0_ & ~0x00000001);
-				columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-				bitField0_ = (bitField0_ & ~0x00000002);
-				if(columnSchemaBuilder_ == null) {
-					columnSchema_ = java.util.Collections.emptyList();
-					bitField0_ = (bitField0_ & ~0x00000004);
-				}
-				else {
-					columnSchemaBuilder_.clear();
-				}
-				return this;
-			}
-
-			@java.lang.Override
-			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_descriptor;
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Row getDefaultInstanceForType() {
-				return org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance();
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Row build() {
-				org.apache.sysds.protobuf.SysdsProtos.Row result = buildPartial();
-				if(!result.isInitialized()) {
-					throw newUninitializedMessageException(result);
-				}
-				return result;
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Row buildPartial() {
-				org.apache.sysds.protobuf.SysdsProtos.Row result = new org.apache.sysds.protobuf.SysdsProtos.Row(this);
-				int from_bitField0_ = bitField0_;
-				if(((bitField0_ & 0x00000001) != 0)) {
-					columnNames_ = columnNames_.getUnmodifiableView();
-					bitField0_ = (bitField0_ & ~0x00000001);
-				}
-				result.columnNames_ = columnNames_;
-				if(((bitField0_ & 0x00000002) != 0)) {
-					columnData_ = columnData_.getUnmodifiableView();
-					bitField0_ = (bitField0_ & ~0x00000002);
-				}
-				result.columnData_ = columnData_;
-				if(columnSchemaBuilder_ == null) {
-					if(((bitField0_ & 0x00000004) != 0)) {
-						columnSchema_ = java.util.Collections.unmodifiableList(columnSchema_);
-						bitField0_ = (bitField0_ & ~0x00000004);
-					}
-					result.columnSchema_ = columnSchema_;
-				}
-				else {
-					result.columnSchema_ = columnSchemaBuilder_.build();
-				}
-				onBuilt();
-				return result;
-			}
-
-			@java.lang.Override
-			public Builder clone() {
-				return super.clone();
-			}
-
-			@java.lang.Override
-			public Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-				return super.setField(field, value);
-			}
-
-			@java.lang.Override
-			public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
-				return super.clearField(field);
-			}
-
-			@java.lang.Override
-			public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-				return super.clearOneof(oneof);
-			}
-
-			@java.lang.Override
-			public Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, int index,
-				java.lang.Object value) {
-				return super.setRepeatedField(field, index, value);
-			}
-
-			@java.lang.Override
-			public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field,
-				java.lang.Object value) {
-				return super.addRepeatedField(field, value);
-			}
-
-			@java.lang.Override
-			public Builder mergeFrom(com.google.protobuf.Message other) {
-				if(other instanceof org.apache.sysds.protobuf.SysdsProtos.Row) {
-					return mergeFrom((org.apache.sysds.protobuf.SysdsProtos.Row) other);
-				}
-				else {
-					super.mergeFrom(other);
-					return this;
-				}
-			}
-
-			public Builder mergeFrom(org.apache.sysds.protobuf.SysdsProtos.Row other) {
-				if(other == org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance())
-					return this;
-				if(!other.columnNames_.isEmpty()) {
-					if(columnNames_.isEmpty()) {
-						columnNames_ = other.columnNames_;
-						bitField0_ = (bitField0_ & ~0x00000001);
-					}
-					else {
-						ensureColumnNamesIsMutable();
-						columnNames_.addAll(other.columnNames_);
-					}
-					onChanged();
-				}
-				if(!other.columnData_.isEmpty()) {
-					if(columnData_.isEmpty()) {
-						columnData_ = other.columnData_;
-						bitField0_ = (bitField0_ & ~0x00000002);
-					}
-					else {
-						ensureColumnDataIsMutable();
-						columnData_.addAll(other.columnData_);
-					}
-					onChanged();
-				}
-				if(columnSchemaBuilder_ == null) {
-					if(!other.columnSchema_.isEmpty()) {
-						if(columnSchema_.isEmpty()) {
-							columnSchema_ = other.columnSchema_;
-							bitField0_ = (bitField0_ & ~0x00000004);
-						}
-						else {
-							ensureColumnSchemaIsMutable();
-							columnSchema_.addAll(other.columnSchema_);
-						}
-						onChanged();
-					}
-				}
-				else {
-					if(!other.columnSchema_.isEmpty()) {
-						if(columnSchemaBuilder_.isEmpty()) {
-							columnSchemaBuilder_.dispose();
-							columnSchemaBuilder_ = null;
-							columnSchema_ = other.columnSchema_;
-							bitField0_ = (bitField0_ & ~0x00000004);
-							columnSchemaBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getColumnSchemaFieldBuilder() : null;
-						}
-						else {
-							columnSchemaBuilder_.addAllMessages(other.columnSchema_);
-						}
-					}
-				}
-				this.mergeUnknownFields(other.unknownFields);
-				onChanged();
-				return this;
-			}
-
-			@java.lang.Override
-			public final boolean isInitialized() {
-				return true;
-			}
-
-			@java.lang.Override
-			public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
-				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-				org.apache.sysds.protobuf.SysdsProtos.Row parsedMessage = null;
-				try {
-					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-				}
-				catch(com.google.protobuf.InvalidProtocolBufferException e) {
-					parsedMessage = (org.apache.sysds.protobuf.SysdsProtos.Row) e.getUnfinishedMessage();
-					throw e.unwrapIOException();
-				}
-				finally {
-					if(parsedMessage != null) {
-						mergeFrom(parsedMessage);
-					}
-				}
-				return this;
-			}
-
-			private void ensureColumnNamesIsMutable() {
-				if(!((bitField0_ & 0x00000001) != 0)) {
-					columnNames_ = new com.google.protobuf.LazyStringArrayList(columnNames_);
-					bitField0_ |= 0x00000001;
-				}
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @return A list containing the columnNames.
-			 */
-			public com.google.protobuf.ProtocolStringList getColumnNamesList() {
-				return columnNames_.getUnmodifiableView();
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @return The count of columnNames.
-			 */
-			public int getColumnNamesCount() {
-				return columnNames_.size();
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @param index The index of the element to return.
-			 * @return The columnNames at the given index.
-			 */
-			public java.lang.String getColumnNames(int index) {
-				return columnNames_.get(index);
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @param index The index of the value to return.
-			 * @return The bytes of the columnNames at the given index.
-			 */
-			public com.google.protobuf.ByteString getColumnNamesBytes(int index) {
-				return columnNames_.getByteString(index);
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @param index The index to set the value at.
-			 * @param value The columnNames to set.
-			 * @return This builder for chaining.
-			 */
-			public Builder setColumnNames(int index, java.lang.String value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				ensureColumnNamesIsMutable();
-				columnNames_.set(index, value);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @param value The columnNames to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addColumnNames(java.lang.String value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				ensureColumnNamesIsMutable();
-				columnNames_.add(value);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @param values The columnNames to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addAllColumnNames(java.lang.Iterable<java.lang.String> values) {
-				ensureColumnNamesIsMutable();
-				com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columnNames_);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @return This builder for chaining.
-			 */
-			public Builder clearColumnNames() {
-				columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-				bitField0_ = (bitField0_ & ~0x00000001);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_names = 1;</code>
-			 *
-			 * @param value The bytes of the columnNames to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addColumnNamesBytes(com.google.protobuf.ByteString value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				checkByteStringIsUtf8(value);
-				ensureColumnNamesIsMutable();
-				columnNames_.add(value);
-				onChanged();
-				return this;
-			}
-
-			private void ensureColumnDataIsMutable() {
-				if(!((bitField0_ & 0x00000002) != 0)) {
-					columnData_ = new com.google.protobuf.LazyStringArrayList(columnData_);
-					bitField0_ |= 0x00000002;
-				}
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @return A list containing the columnData.
-			 */
-			public com.google.protobuf.ProtocolStringList getColumnDataList() {
-				return columnData_.getUnmodifiableView();
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @return The count of columnData.
-			 */
-			public int getColumnDataCount() {
-				return columnData_.size();
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @param index The index of the element to return.
-			 * @return The columnData at the given index.
-			 */
-			public java.lang.String getColumnData(int index) {
-				return columnData_.get(index);
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @param index The index of the value to return.
-			 * @return The bytes of the columnData at the given index.
-			 */
-			public com.google.protobuf.ByteString getColumnDataBytes(int index) {
-				return columnData_.getByteString(index);
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @param index The index to set the value at.
-			 * @param value The columnData to set.
-			 * @return This builder for chaining.
-			 */
-			public Builder setColumnData(int index, java.lang.String value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				ensureColumnDataIsMutable();
-				columnData_.set(index, value);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @param value The columnData to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addColumnData(java.lang.String value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				ensureColumnDataIsMutable();
-				columnData_.add(value);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @param values The columnData to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addAllColumnData(java.lang.Iterable<java.lang.String> values) {
-				ensureColumnDataIsMutable();
-				com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columnData_);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @return This builder for chaining.
-			 */
-			public Builder clearColumnData() {
-				columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-				bitField0_ = (bitField0_ & ~0x00000002);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated string column_data = 2;</code>
-			 *
-			 * @param value The bytes of the columnData to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addColumnDataBytes(com.google.protobuf.ByteString value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				checkByteStringIsUtf8(value);
-				ensureColumnDataIsMutable();
-				columnData_.add(value);
-				onChanged();
-				return this;
-			}
-
-			private void ensureColumnSchemaIsMutable() {
-				if(!((bitField0_ & 0x00000004) != 0)) {
-					columnSchema_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Schema>(
-						columnSchema_);
-					bitField0_ |= 0x00000004;
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> getColumnSchemaList() {
-				if(columnSchemaBuilder_ == null) {
-					return java.util.Collections.unmodifiableList(columnSchema_);
-				}
-				else {
-					return columnSchemaBuilder_.getMessageList();
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public int getColumnSchemaCount() {
-				if(columnSchemaBuilder_ == null) {
-					return columnSchema_.size();
-				}
-				else {
-					return columnSchemaBuilder_.getCount();
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Schema getColumnSchema(int index) {
-				if(columnSchemaBuilder_ == null) {
-					return columnSchema_.get(index);
-				}
-				else {
-					return columnSchemaBuilder_.getMessage(index);
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder setColumnSchema(int index, org.apache.sysds.protobuf.SysdsProtos.Schema value) {
-				if(columnSchemaBuilder_ == null) {
-					if(value == null) {
-						throw new NullPointerException();
-					}
-					ensureColumnSchemaIsMutable();
-					columnSchema_.set(index, value);
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.setMessage(index, value);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder setColumnSchema(int index,
-				org.apache.sysds.protobuf.SysdsProtos.Schema.Builder builderForValue) {
-				if(columnSchemaBuilder_ == null) {
-					ensureColumnSchemaIsMutable();
-					columnSchema_.set(index, builderForValue.build());
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.setMessage(index, builderForValue.build());
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder addColumnSchema(org.apache.sysds.protobuf.SysdsProtos.Schema value) {
-				if(columnSchemaBuilder_ == null) {
-					if(value == null) {
-						throw new NullPointerException();
-					}
-					ensureColumnSchemaIsMutable();
-					columnSchema_.add(value);
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.addMessage(value);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder addColumnSchema(int index, org.apache.sysds.protobuf.SysdsProtos.Schema value) {
-				if(columnSchemaBuilder_ == null) {
-					if(value == null) {
-						throw new NullPointerException();
-					}
-					ensureColumnSchemaIsMutable();
-					columnSchema_.add(index, value);
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.addMessage(index, value);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder addColumnSchema(org.apache.sysds.protobuf.SysdsProtos.Schema.Builder builderForValue) {
-				if(columnSchemaBuilder_ == null) {
-					ensureColumnSchemaIsMutable();
-					columnSchema_.add(builderForValue.build());
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.addMessage(builderForValue.build());
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder addColumnSchema(int index,
-				org.apache.sysds.protobuf.SysdsProtos.Schema.Builder builderForValue) {
-				if(columnSchemaBuilder_ == null) {
-					ensureColumnSchemaIsMutable();
-					columnSchema_.add(index, builderForValue.build());
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.addMessage(index, builderForValue.build());
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder addAllColumnSchema(
-				java.lang.Iterable<? extends org.apache.sysds.protobuf.SysdsProtos.Schema> values) {
-				if(columnSchemaBuilder_ == null) {
-					ensureColumnSchemaIsMutable();
-					com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columnSchema_);
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.addAllMessages(values);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder clearColumnSchema() {
-				if(columnSchemaBuilder_ == null) {
-					columnSchema_ = java.util.Collections.emptyList();
-					bitField0_ = (bitField0_ & ~0x00000004);
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.clear();
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public Builder removeColumnSchema(int index) {
-				if(columnSchemaBuilder_ == null) {
-					ensureColumnSchemaIsMutable();
-					columnSchema_.remove(index);
-					onChanged();
-				}
-				else {
-					columnSchemaBuilder_.remove(index);
-				}
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Schema.Builder getColumnSchemaBuilder(int index) {
-				return getColumnSchemaFieldBuilder().getBuilder(index);
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder getColumnSchemaOrBuilder(int index) {
-				if(columnSchemaBuilder_ == null) {
-					return columnSchema_.get(index);
-				}
-				else {
-					return columnSchemaBuilder_.getMessageOrBuilder(index);
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> getColumnSchemaOrBuilderList() {
-				if(columnSchemaBuilder_ != null) {
-					return columnSchemaBuilder_.getMessageOrBuilderList();
-				}
-				else {
-					return java.util.Collections.unmodifiableList(columnSchema_);
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Schema.Builder addColumnSchemaBuilder() {
-				return getColumnSchemaFieldBuilder()
-					.addBuilder(org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance());
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Schema.Builder addColumnSchemaBuilder(int index) {
-				return getColumnSchemaFieldBuilder().addBuilder(index,
-					org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance());
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema column_schema = 3;</code>
-			 */
-			public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.Builder> getColumnSchemaBuilderList() {
-				return getColumnSchemaFieldBuilder().getBuilderList();
-			}
-
-			private com.google.protobuf.RepeatedFieldBuilderV3<org.apache.sysds.protobuf.SysdsProtos.Schema, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder, org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> getColumnSchemaFieldBuilder() {
-				if(columnSchemaBuilder_ == null) {
-					columnSchemaBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<org.apache.sysds.protobuf.SysdsProtos.Schema, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder, org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder>(
-						columnSchema_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
-					columnSchema_ = null;
-				}
-				return columnSchemaBuilder_;
-			}
-
-			@java.lang.Override
-			public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
-				return super.setUnknownFields(unknownFields);
-			}
-
-			@java.lang.Override
-			public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
-				return super.mergeUnknownFields(unknownFields);
-			}
-
-			// @@protoc_insertion_point(builder_scope:sysds.Row)
-		}
-
-	}
-
-	/**
-	 * Protobuf type {@code sysds.Schema}
-	 */
-	public static final class Schema extends com.google.protobuf.GeneratedMessageV3 implements
-		// @@protoc_insertion_point(message_implements:sysds.Schema)
-		SchemaOrBuilder {
-		public static final int VALUETYPE_FIELD_NUMBER = 1;
-		private static final long serialVersionUID = 0L;
-		private static final com.google.protobuf.Internal.ListAdapter.Converter<java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> valueType_converter_ = new com.google.protobuf.Internal.ListAdapter.Converter<java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType>() {
-			public org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType convert(java.lang.Integer from) {
-				// @SuppressWarnings("deprecation")
-				org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType result = org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType
-					.valueOf(from);
-				return result == null ? org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType.UNRECOGNIZED : result;
-			}
-		};
-		// @@protoc_insertion_point(class_scope:sysds.Schema)
-		private static final org.apache.sysds.protobuf.SysdsProtos.Schema DEFAULT_INSTANCE;
-		private static final com.google.protobuf.Parser<Schema> PARSER = new com.google.protobuf.AbstractParser<Schema>() {
-			@java.lang.Override
-			public Schema parsePartialFrom(com.google.protobuf.CodedInputStream input,
-				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-				throws com.google.protobuf.InvalidProtocolBufferException {
-				return new Schema(input, extensionRegistry);
-			}
-		};
-
-		static {
-			DEFAULT_INSTANCE = new org.apache.sysds.protobuf.SysdsProtos.Schema();
-		}
-
-		private java.util.List<java.lang.Integer> valueType_;
-		private int valueTypeMemoizedSerializedSize;
-		private byte memoizedIsInitialized = -1;
-
-		// Use Schema.newBuilder() to construct.
-		private Schema(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-			super(builder);
-		}
-
-		private Schema() {
-			valueType_ = java.util.Collections.emptyList();
-		}
-
-		private Schema(com.google.protobuf.CodedInputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			this();
-			if(extensionRegistry == null) {
-				throw new java.lang.NullPointerException();
-			}
-			int mutable_bitField0_ = 0;
-			com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
-				.newBuilder();
-			try {
-				boolean done = false;
-				while(!done) {
-					int tag = input.readTag();
-					switch(tag) {
-						case 0:
-							done = true;
-							break;
-						case 8: {
-							int rawValue = input.readEnum();
-							if(!((mutable_bitField0_ & 0x00000001) != 0)) {
-								valueType_ = new java.util.ArrayList<java.lang.Integer>();
-								mutable_bitField0_ |= 0x00000001;
-							}
-							valueType_.add(rawValue);
-							break;
-						}
-						case 10: {
-							int length = input.readRawVarint32();
-							int oldLimit = input.pushLimit(length);
-							while(input.getBytesUntilLimit() > 0) {
-								int rawValue = input.readEnum();
-								if(!((mutable_bitField0_ & 0x00000001) != 0)) {
-									valueType_ = new java.util.ArrayList<java.lang.Integer>();
-									mutable_bitField0_ |= 0x00000001;
-								}
-								valueType_.add(rawValue);
-							}
-							input.popLimit(oldLimit);
-							break;
-						}
-						default: {
-							if(!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
-								done = true;
-							}
-							break;
-						}
-					}
-				}
-			}
-			catch(com.google.protobuf.InvalidProtocolBufferException e) {
-				throw e.setUnfinishedMessage(this);
-			}
-			catch(java.io.IOException e) {
-				throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
-			}
-			finally {
-				if(((mutable_bitField0_ & 0x00000001) != 0)) {
-					valueType_ = java.util.Collections.unmodifiableList(valueType_);
-				}
-				this.unknownFields = unknownFields.build();
-				makeExtensionsImmutable();
-			}
-		}
-
-		public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-			return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_descriptor;
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(java.nio.ByteBuffer data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(java.nio.ByteBuffer data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(com.google.protobuf.ByteString data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(com.google.protobuf.ByteString data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(byte[] data)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(byte[] data,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-			throws com.google.protobuf.InvalidProtocolBufferException {
-			return PARSER.parseFrom(data, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(java.io.InputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(java.io.InputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseDelimitedFrom(java.io.InputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseDelimitedFrom(java.io.InputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3
-				.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(com.google.protobuf.CodedInputStream input)
-			throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(com.google.protobuf.CodedInputStream input,
-			com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-			return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
-		}
-
-		public static Builder newBuilder() {
-			return DEFAULT_INSTANCE.toBuilder();
-		}
-
-		public static Builder newBuilder(org.apache.sysds.protobuf.SysdsProtos.Schema prototype) {
-			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-		}
-
-		public static org.apache.sysds.protobuf.SysdsProtos.Schema getDefaultInstance() {
-			return DEFAULT_INSTANCE;
-		}
-
-		public static com.google.protobuf.Parser<Schema> parser() {
-			return PARSER;
-		}
-
-		@java.lang.Override
-		@SuppressWarnings({"unused"})
-		protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-			return new Schema();
-		}
-
-		@java.lang.Override
-		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-			return this.unknownFields;
-		}
-
-		@java.lang.Override
-		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-			return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_fieldAccessorTable
-				.ensureFieldAccessorsInitialized(org.apache.sysds.protobuf.SysdsProtos.Schema.class,
-					org.apache.sysds.protobuf.SysdsProtos.Schema.Builder.class);
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @return A list containing the valueType.
-		 */
-		@java.lang.Override
-		public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> getValueTypeList() {
-			return new com.google.protobuf.Internal.ListAdapter<java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType>(
-				valueType_, valueType_converter_);
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @return The count of valueType.
-		 */
-		@java.lang.Override
-		public int getValueTypeCount() {
-			return valueType_.size();
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @param index The index of the element to return.
-		 * @return The valueType at the given index.
-		 */
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType getValueType(int index) {
-			return valueType_converter_.convert(valueType_.get(index));
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @return A list containing the enum numeric values on the wire for valueType.
-		 */
-		@java.lang.Override
-		public java.util.List<java.lang.Integer> getValueTypeValueList() {
-			return valueType_;
-		}
-
-		/**
-		 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-		 *
-		 * @param index The index of the value to return.
-		 * @return The enum numeric value on the wire of valueType at the given index.
-		 */
-		@java.lang.Override
-		public int getValueTypeValue(int index) {
-			return valueType_.get(index);
-		}
-
-		@java.lang.Override
-		public final boolean isInitialized() {
-			byte isInitialized = memoizedIsInitialized;
-			if(isInitialized == 1)
-				return true;
-			if(isInitialized == 0)
-				return false;
-
-			memoizedIsInitialized = 1;
-			return true;
-		}
-
-		@java.lang.Override
-		public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-			getSerializedSize();
-			if(getValueTypeList().size() > 0) {
-				output.writeUInt32NoTag(10);
-				output.writeUInt32NoTag(valueTypeMemoizedSerializedSize);
-			}
-			for(int i = 0; i < valueType_.size(); i++) {
-				output.writeEnumNoTag(valueType_.get(i));
-			}
-			unknownFields.writeTo(output);
-		}
-
-		@java.lang.Override
-		public int getSerializedSize() {
-			int size = memoizedSize;
-			if(size != -1)
-				return size;
-
-			size = 0;
-			{
-				int dataSize = 0;
-				for(int i = 0; i < valueType_.size(); i++) {
-					dataSize += com.google.protobuf.CodedOutputStream.computeEnumSizeNoTag(valueType_.get(i));
-				}
-				size += dataSize;
-				if(!getValueTypeList().isEmpty()) {
-					size += 1;
-					size += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(dataSize);
-				}
-				valueTypeMemoizedSerializedSize = dataSize;
-			}
-			size += unknownFields.getSerializedSize();
-			memoizedSize = size;
-			return size;
-		}
-
-		@java.lang.Override
-		public boolean equals(final java.lang.Object obj) {
-			if(obj == this) {
-				return true;
-			}
-			if(!(obj instanceof org.apache.sysds.protobuf.SysdsProtos.Schema)) {
-				return super.equals(obj);
-			}
-			org.apache.sysds.protobuf.SysdsProtos.Schema other = (org.apache.sysds.protobuf.SysdsProtos.Schema) obj;
-
-			if(!valueType_.equals(other.valueType_))
-				return false;
-			if(!unknownFields.equals(other.unknownFields))
-				return false;
-			return true;
-		}
-
-		@java.lang.Override
-		public int hashCode() {
-			if(memoizedHashCode != 0) {
-				return memoizedHashCode;
-			}
-			int hash = 41;
-			hash = (19 * hash) + getDescriptor().hashCode();
-			if(getValueTypeCount() > 0) {
-				hash = (37 * hash) + VALUETYPE_FIELD_NUMBER;
-				hash = (53 * hash) + valueType_.hashCode();
-			}
-			hash = (29 * hash) + unknownFields.hashCode();
-			memoizedHashCode = hash;
-			return hash;
-		}
-
-		@java.lang.Override
-		public Builder newBuilderForType() {
-			return newBuilder();
-		}
-
-		@java.lang.Override
-		public Builder toBuilder() {
-			return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
-		}
-
-		@java.lang.Override
-		protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-			Builder builder = new Builder(parent);
-			return builder;
-		}
-
-		@java.lang.Override
-		public com.google.protobuf.Parser<Schema> getParserForType() {
-			return PARSER;
-		}
-
-		@java.lang.Override
-		public org.apache.sysds.protobuf.SysdsProtos.Schema getDefaultInstanceForType() {
-			return DEFAULT_INSTANCE;
-		}
-
-		/**
-		 * Protobuf enum {@code sysds.Schema.ValueType}
-		 */
-		public enum ValueType implements com.google.protobuf.ProtocolMessageEnum {
-			/**
-			 * <code>FP32 = 0;</code>
-			 */
-			FP32(0),
-			/**
-			 * <code>FP64 = 1;</code>
-			 */
-			FP64(1),
-			/**
-			 * <code>INT32 = 2;</code>
-			 */
-			INT32(2),
-			/**
-			 * <code>INT64 = 3;</code>
-			 */
-			INT64(3),
-			/**
-			 * <code>BOOLEAN = 4;</code>
-			 */
-			BOOLEAN(4),
-			/**
-			 * <code>STRING = 5;</code>
-			 */
-			STRING(5),
-			/**
-			 * <code>UNKNOWN = 6;</code>
-			 */
-			UNKNOWN(6), UNRECOGNIZED(-1),;
-
-			/**
-			 * <code>FP32 = 0;</code>
-			 */
-			public static final int FP32_VALUE = 0;
-			/**
-			 * <code>FP64 = 1;</code>
-			 */
-			public static final int FP64_VALUE = 1;
-			/**
-			 * <code>INT32 = 2;</code>
-			 */
-			public static final int INT32_VALUE = 2;
-			/**
-			 * <code>INT64 = 3;</code>
-			 */
-			public static final int INT64_VALUE = 3;
-			/**
-			 * <code>BOOLEAN = 4;</code>
-			 */
-			public static final int BOOLEAN_VALUE = 4;
-			/**
-			 * <code>STRING = 5;</code>
-			 */
-			public static final int STRING_VALUE = 5;
-			/**
-			 * <code>UNKNOWN = 6;</code>
-			 */
-			public static final int UNKNOWN_VALUE = 6;
-			private static final com.google.protobuf.Internal.EnumLiteMap<ValueType> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<ValueType>() {
-				public ValueType findValueByNumber(int number) {
-					return ValueType.forNumber(number);
-				}
-			};
-			private static final ValueType[] VALUES = values();
-			private final int value;
-
-			private ValueType(int value) {
-				this.value = value;
-			}
-
-			/**
-			 * @param value The numeric wire value of the corresponding enum entry.
-			 * @return The enum associated with the given numeric wire value.
-			 * @deprecated Use {@link #forNumber(int)} instead.
-			 */
-			@java.lang.Deprecated
-			public static ValueType valueOf(int value) {
-				return forNumber(value);
-			}
-
-			/**
-			 * @param value The numeric wire value of the corresponding enum entry.
-			 * @return The enum associated with the given numeric wire value.
-			 */
-			public static ValueType forNumber(int value) {
-				switch(value) {
-					case 0:
-						return FP32;
-					case 1:
-						return FP64;
-					case 2:
-						return INT32;
-					case 3:
-						return INT64;
-					case 4:
-						return BOOLEAN;
-					case 5:
-						return STRING;
-					case 6:
-						return UNKNOWN;
-					default:
-						return null;
-				}
-			}
-
-			public static com.google.protobuf.Internal.EnumLiteMap<ValueType> internalGetValueMap() {
-				return internalValueMap;
-			}
-
-			public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-				return org.apache.sysds.protobuf.SysdsProtos.Schema.getDescriptor().getEnumTypes().get(0);
-			}
-
-			public static ValueType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-				if(desc.getType() != getDescriptor()) {
-					throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
-				}
-				if(desc.getIndex() == -1) {
-					return UNRECOGNIZED;
-				}
-				return VALUES[desc.getIndex()];
-			}
-
-			public final int getNumber() {
-				if(this == UNRECOGNIZED) {
-					throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
-				}
-				return value;
-			}
-
-			public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
-				if(this == UNRECOGNIZED) {
-					throw new java.lang.IllegalStateException(
-						"Can't get the descriptor of an unrecognized enum value.");
-				}
-				return getDescriptor().getValues().get(ordinal());
-			}
-
-			public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
-				return getDescriptor();
-			}
-
-			// @@protoc_insertion_point(enum_scope:sysds.Schema.ValueType)
-		}
-
-		/**
-		 * Protobuf type {@code sysds.Schema}
-		 */
-		public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-			// @@protoc_insertion_point(builder_implements:sysds.Schema)
-			org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder {
-			private int bitField0_;
-			private java.util.List<java.lang.Integer> valueType_ = java.util.Collections.emptyList();
-
-			// Construct using org.apache.sysds.protobuf.SysdsProtos.Schema.newBuilder()
-			private Builder() {
-				maybeForceBuilderInitialization();
-			}
-
-			private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-				super(parent);
-				maybeForceBuilderInitialization();
-			}
-
-			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_descriptor;
-			}
-
-			@java.lang.Override
-			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_fieldAccessorTable
-					.ensureFieldAccessorsInitialized(org.apache.sysds.protobuf.SysdsProtos.Schema.class,
-						org.apache.sysds.protobuf.SysdsProtos.Schema.Builder.class);
-			}
-
-			private void maybeForceBuilderInitialization() {
-				if(com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-				}
-			}
-
-			@java.lang.Override
-			public Builder clear() {
-				super.clear();
-				valueType_ = java.util.Collections.emptyList();
-				bitField0_ = (bitField0_ & ~0x00000001);
-				return this;
-			}
-
-			@java.lang.Override
-			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-				return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_descriptor;
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Schema getDefaultInstanceForType() {
-				return org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance();
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Schema build() {
-				org.apache.sysds.protobuf.SysdsProtos.Schema result = buildPartial();
-				if(!result.isInitialized()) {
-					throw newUninitializedMessageException(result);
-				}
-				return result;
-			}
-
-			@java.lang.Override
-			public org.apache.sysds.protobuf.SysdsProtos.Schema buildPartial() {
-				org.apache.sysds.protobuf.SysdsProtos.Schema result = new org.apache.sysds.protobuf.SysdsProtos.Schema(
-					this);
-				int from_bitField0_ = bitField0_;
-				if(((bitField0_ & 0x00000001) != 0)) {
-					valueType_ = java.util.Collections.unmodifiableList(valueType_);
-					bitField0_ = (bitField0_ & ~0x00000001);
-				}
-				result.valueType_ = valueType_;
-				onBuilt();
-				return result;
-			}
-
-			@java.lang.Override
-			public Builder clone() {
-				return super.clone();
-			}
-
-			@java.lang.Override
-			public Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-				return super.setField(field, value);
-			}
-
-			@java.lang.Override
-			public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
-				return super.clearField(field);
-			}
-
-			@java.lang.Override
-			public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-				return super.clearOneof(oneof);
-			}
-
-			@java.lang.Override
-			public Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, int index,
-				java.lang.Object value) {
-				return super.setRepeatedField(field, index, value);
-			}
-
-			@java.lang.Override
-			public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field,
-				java.lang.Object value) {
-				return super.addRepeatedField(field, value);
-			}
-
-			@java.lang.Override
-			public Builder mergeFrom(com.google.protobuf.Message other) {
-				if(other instanceof org.apache.sysds.protobuf.SysdsProtos.Schema) {
-					return mergeFrom((org.apache.sysds.protobuf.SysdsProtos.Schema) other);
-				}
-				else {
-					super.mergeFrom(other);
-					return this;
-				}
-			}
-
-			public Builder mergeFrom(org.apache.sysds.protobuf.SysdsProtos.Schema other) {
-				if(other == org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance())
-					return this;
-				if(!other.valueType_.isEmpty()) {
-					if(valueType_.isEmpty()) {
-						valueType_ = other.valueType_;
-						bitField0_ = (bitField0_ & ~0x00000001);
-					}
-					else {
-						ensureValueTypeIsMutable();
-						valueType_.addAll(other.valueType_);
-					}
-					onChanged();
-				}
-				this.mergeUnknownFields(other.unknownFields);
-				onChanged();
-				return this;
-			}
-
-			@java.lang.Override
-			public final boolean isInitialized() {
-				return true;
-			}
-
-			@java.lang.Override
-			public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
-				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-				org.apache.sysds.protobuf.SysdsProtos.Schema parsedMessage = null;
-				try {
-					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-				}
-				catch(com.google.protobuf.InvalidProtocolBufferException e) {
-					parsedMessage = (org.apache.sysds.protobuf.SysdsProtos.Schema) e.getUnfinishedMessage();
-					throw e.unwrapIOException();
-				}
-				finally {
-					if(parsedMessage != null) {
-						mergeFrom(parsedMessage);
-					}
-				}
-				return this;
-			}
-
-			private void ensureValueTypeIsMutable() {
-				if(!((bitField0_ & 0x00000001) != 0)) {
-					valueType_ = new java.util.ArrayList<java.lang.Integer>(valueType_);
-					bitField0_ |= 0x00000001;
-				}
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @return A list containing the valueType.
-			 */
-			public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> getValueTypeList() {
-				return new com.google.protobuf.Internal.ListAdapter<java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType>(
-					valueType_, valueType_converter_);
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @return The count of valueType.
-			 */
-			public int getValueTypeCount() {
-				return valueType_.size();
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param index The index of the element to return.
-			 * @return The valueType at the given index.
-			 */
-			public org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType getValueType(int index) {
-				return valueType_converter_.convert(valueType_.get(index));
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param index The index to set the value at.
-			 * @param value The valueType to set.
-			 * @return This builder for chaining.
-			 */
-			public Builder setValueType(int index, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				ensureValueTypeIsMutable();
-				valueType_.set(index, value.getNumber());
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param value The valueType to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addValueType(org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType value) {
-				if(value == null) {
-					throw new NullPointerException();
-				}
-				ensureValueTypeIsMutable();
-				valueType_.add(value.getNumber());
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param values The valueType to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addAllValueType(
-				java.lang.Iterable<? extends org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> values) {
-				ensureValueTypeIsMutable();
-				for(org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType value : values) {
-					valueType_.add(value.getNumber());
-				}
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @return This builder for chaining.
-			 */
-			public Builder clearValueType() {
-				valueType_ = java.util.Collections.emptyList();
-				bitField0_ = (bitField0_ & ~0x00000001);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @return A list containing the enum numeric values on the wire for valueType.
-			 */
-			public java.util.List<java.lang.Integer> getValueTypeValueList() {
-				return java.util.Collections.unmodifiableList(valueType_);
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param index The index of the value to return.
-			 * @return The enum numeric value on the wire of valueType at the given index.
-			 */
-			public int getValueTypeValue(int index) {
-				return valueType_.get(index);
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param index The index of the value to return.
-			 * @return The enum numeric value on the wire of valueType at the given index.
-			 * @return This builder for chaining.
-			 */
-			public Builder setValueTypeValue(int index, int value) {
-				ensureValueTypeIsMutable();
-				valueType_.set(index, value);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param value The enum numeric value on the wire for valueType to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addValueTypeValue(int value) {
-				ensureValueTypeIsMutable();
-				valueType_.add(value);
-				onChanged();
-				return this;
-			}
-
-			/**
-			 * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
-			 *
-			 * @param values The enum numeric values on the wire for valueType to add.
-			 * @return This builder for chaining.
-			 */
-			public Builder addAllValueTypeValue(java.lang.Iterable<java.lang.Integer> values) {
-				ensureValueTypeIsMutable();
-				for(int value : values) {
-					valueType_.add(value);
-				}
-				onChanged();
-				return this;
-			}
-
-			@java.lang.Override
-			public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
-				return super.setUnknownFields(unknownFields);
-			}
-
-			@java.lang.Override
-			public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
-				return super.mergeUnknownFields(unknownFields);
-			}
-
-			// @@protoc_insertion_point(builder_scope:sysds.Schema)
-		}
-
-	}
-
-	// @@protoc_insertion_point(outer_class_scope)
+  private SysdsProtos() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public interface FrameOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:sysds.Frame)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> 
+        getRowsList();
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    org.apache.sysds.protobuf.SysdsProtos.Row getRows(int index);
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    int getRowsCount();
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> 
+        getRowsOrBuilderList();
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder getRowsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code sysds.Frame}
+   */
+  public static final class Frame extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:sysds.Frame)
+      FrameOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Frame.newBuilder() to construct.
+    private Frame(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Frame() {
+      rows_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Frame();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Frame(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                rows_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Row>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              rows_.add(
+                  input.readMessage(org.apache.sysds.protobuf.SysdsProtos.Row.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          rows_ = java.util.Collections.unmodifiableList(rows_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.sysds.protobuf.SysdsProtos.Frame.class, org.apache.sysds.protobuf.SysdsProtos.Frame.Builder.class);
+    }
+
+    public static final int ROWS_FIELD_NUMBER = 1;
+    private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> rows_;
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> getRowsList() {
+      return rows_;
+    }
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> 
+        getRowsOrBuilderList() {
+      return rows_;
+    }
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    @java.lang.Override
+    public int getRowsCount() {
+      return rows_.size();
+    }
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.Row getRows(int index) {
+      return rows_.get(index);
+    }
+    /**
+     * <code>repeated .sysds.Row rows = 1;</code>
+     */
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder getRowsOrBuilder(
+        int index) {
+      return rows_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < rows_.size(); i++) {
+        output.writeMessage(1, rows_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < rows_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, rows_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.sysds.protobuf.SysdsProtos.Frame)) {
+        return super.equals(obj);
+      }
+      org.apache.sysds.protobuf.SysdsProtos.Frame other = (org.apache.sysds.protobuf.SysdsProtos.Frame) obj;
+
+      if (!getRowsList()
+          .equals(other.getRowsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getRowsCount() > 0) {
+        hash = (37 * hash) + ROWS_FIELD_NUMBER;
+        hash = (53 * hash) + getRowsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.sysds.protobuf.SysdsProtos.Frame prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code sysds.Frame}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:sysds.Frame)
+        org.apache.sysds.protobuf.SysdsProtos.FrameOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.sysds.protobuf.SysdsProtos.Frame.class, org.apache.sysds.protobuf.SysdsProtos.Frame.Builder.class);
+      }
+
+      // Construct using org.apache.sysds.protobuf.SysdsProtos.Frame.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getRowsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (rowsBuilder_ == null) {
+          rows_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          rowsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Frame_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Frame getDefaultInstanceForType() {
+        return org.apache.sysds.protobuf.SysdsProtos.Frame.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Frame build() {
+        org.apache.sysds.protobuf.SysdsProtos.Frame result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Frame buildPartial() {
+        org.apache.sysds.protobuf.SysdsProtos.Frame result = new org.apache.sysds.protobuf.SysdsProtos.Frame(this);
+        int from_bitField0_ = bitField0_;
+        if (rowsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            rows_ = java.util.Collections.unmodifiableList(rows_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.rows_ = rows_;
+        } else {
+          result.rows_ = rowsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.sysds.protobuf.SysdsProtos.Frame) {
+          return mergeFrom((org.apache.sysds.protobuf.SysdsProtos.Frame)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.sysds.protobuf.SysdsProtos.Frame other) {
+        if (other == org.apache.sysds.protobuf.SysdsProtos.Frame.getDefaultInstance()) return this;
+        if (rowsBuilder_ == null) {
+          if (!other.rows_.isEmpty()) {
+            if (rows_.isEmpty()) {
+              rows_ = other.rows_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureRowsIsMutable();
+              rows_.addAll(other.rows_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.rows_.isEmpty()) {
+            if (rowsBuilder_.isEmpty()) {
+              rowsBuilder_.dispose();
+              rowsBuilder_ = null;
+              rows_ = other.rows_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              rowsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getRowsFieldBuilder() : null;
+            } else {
+              rowsBuilder_.addAllMessages(other.rows_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.sysds.protobuf.SysdsProtos.Frame parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.sysds.protobuf.SysdsProtos.Frame) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> rows_ =
+        java.util.Collections.emptyList();
+      private void ensureRowsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          rows_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Row>(rows_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.apache.sysds.protobuf.SysdsProtos.Row, org.apache.sysds.protobuf.SysdsProtos.Row.Builder, org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> rowsBuilder_;
+
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row> getRowsList() {
+        if (rowsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(rows_);
+        } else {
+          return rowsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public int getRowsCount() {
+        if (rowsBuilder_ == null) {
+          return rows_.size();
+        } else {
+          return rowsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Row getRows(int index) {
+        if (rowsBuilder_ == null) {
+          return rows_.get(index);
+        } else {
+          return rowsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder setRows(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Row value) {
+        if (rowsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRowsIsMutable();
+          rows_.set(index, value);
+          onChanged();
+        } else {
+          rowsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder setRows(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Row.Builder builderForValue) {
+        if (rowsBuilder_ == null) {
+          ensureRowsIsMutable();
+          rows_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          rowsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder addRows(org.apache.sysds.protobuf.SysdsProtos.Row value) {
+        if (rowsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRowsIsMutable();
+          rows_.add(value);
+          onChanged();
+        } else {
+          rowsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder addRows(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Row value) {
+        if (rowsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRowsIsMutable();
+          rows_.add(index, value);
+          onChanged();
+        } else {
+          rowsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder addRows(
+          org.apache.sysds.protobuf.SysdsProtos.Row.Builder builderForValue) {
+        if (rowsBuilder_ == null) {
+          ensureRowsIsMutable();
+          rows_.add(builderForValue.build());
+          onChanged();
+        } else {
+          rowsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder addRows(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Row.Builder builderForValue) {
+        if (rowsBuilder_ == null) {
+          ensureRowsIsMutable();
+          rows_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          rowsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder addAllRows(
+          java.lang.Iterable<? extends org.apache.sysds.protobuf.SysdsProtos.Row> values) {
+        if (rowsBuilder_ == null) {
+          ensureRowsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, rows_);
+          onChanged();
+        } else {
+          rowsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder clearRows() {
+        if (rowsBuilder_ == null) {
+          rows_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          rowsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public Builder removeRows(int index) {
+        if (rowsBuilder_ == null) {
+          ensureRowsIsMutable();
+          rows_.remove(index);
+          onChanged();
+        } else {
+          rowsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Row.Builder getRowsBuilder(
+          int index) {
+        return getRowsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder getRowsOrBuilder(
+          int index) {
+        if (rowsBuilder_ == null) {
+          return rows_.get(index);  } else {
+          return rowsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> 
+           getRowsOrBuilderList() {
+        if (rowsBuilder_ != null) {
+          return rowsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(rows_);
+        }
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Row.Builder addRowsBuilder() {
+        return getRowsFieldBuilder().addBuilder(
+            org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Row.Builder addRowsBuilder(
+          int index) {
+        return getRowsFieldBuilder().addBuilder(
+            index, org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sysds.Row rows = 1;</code>
+       */
+      public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Row.Builder> 
+           getRowsBuilderList() {
+        return getRowsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.apache.sysds.protobuf.SysdsProtos.Row, org.apache.sysds.protobuf.SysdsProtos.Row.Builder, org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder> 
+          getRowsFieldBuilder() {
+        if (rowsBuilder_ == null) {
+          rowsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              org.apache.sysds.protobuf.SysdsProtos.Row, org.apache.sysds.protobuf.SysdsProtos.Row.Builder, org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder>(
+                  rows_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          rows_ = null;
+        }
+        return rowsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:sysds.Frame)
+    }
+
+    // @@protoc_insertion_point(class_scope:sysds.Frame)
+    private static final org.apache.sysds.protobuf.SysdsProtos.Frame DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.sysds.protobuf.SysdsProtos.Frame();
+    }
+
+    public static org.apache.sysds.protobuf.SysdsProtos.Frame getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Frame>
+        PARSER = new com.google.protobuf.AbstractParser<Frame>() {
+      @java.lang.Override
+      public Frame parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Frame(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Frame> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Frame> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.Frame getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface RowOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:sysds.Row)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @return A list containing the columnNames.
+     */
+    java.util.List<java.lang.String>
+        getColumnNamesList();
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @return The count of columnNames.
+     */
+    int getColumnNamesCount();
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @param index The index of the element to return.
+     * @return The columnNames at the given index.
+     */
+    java.lang.String getColumnNames(int index);
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the columnNames at the given index.
+     */
+    com.google.protobuf.ByteString
+        getColumnNamesBytes(int index);
+
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @return A list containing the columnData.
+     */
+    java.util.List<java.lang.String>
+        getColumnDataList();
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @return The count of columnData.
+     */
+    int getColumnDataCount();
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @param index The index of the element to return.
+     * @return The columnData at the given index.
+     */
+    java.lang.String getColumnData(int index);
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the columnData at the given index.
+     */
+    com.google.protobuf.ByteString
+        getColumnDataBytes(int index);
+
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> 
+        getColumnSchemaList();
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    org.apache.sysds.protobuf.SysdsProtos.Schema getColumnSchema(int index);
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    int getColumnSchemaCount();
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> 
+        getColumnSchemaOrBuilderList();
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder getColumnSchemaOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code sysds.Row}
+   */
+  public static final class Row extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:sysds.Row)
+      RowOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Row.newBuilder() to construct.
+    private Row(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Row() {
+      columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      columnSchema_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Row();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Row(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                columnNames_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              columnNames_.add(s);
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                columnData_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              columnData_.add(s);
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                columnSchema_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Schema>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              columnSchema_.add(
+                  input.readMessage(org.apache.sysds.protobuf.SysdsProtos.Schema.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          columnNames_ = columnNames_.getUnmodifiableView();
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          columnData_ = columnData_.getUnmodifiableView();
+        }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          columnSchema_ = java.util.Collections.unmodifiableList(columnSchema_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.sysds.protobuf.SysdsProtos.Row.class, org.apache.sysds.protobuf.SysdsProtos.Row.Builder.class);
+    }
+
+    public static final int COLUMN_NAMES_FIELD_NUMBER = 1;
+    private com.google.protobuf.LazyStringList columnNames_;
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @return A list containing the columnNames.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getColumnNamesList() {
+      return columnNames_;
+    }
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @return The count of columnNames.
+     */
+    public int getColumnNamesCount() {
+      return columnNames_.size();
+    }
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @param index The index of the element to return.
+     * @return The columnNames at the given index.
+     */
+    public java.lang.String getColumnNames(int index) {
+      return columnNames_.get(index);
+    }
+    /**
+     * <code>repeated string column_names = 1;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the columnNames at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getColumnNamesBytes(int index) {
+      return columnNames_.getByteString(index);
+    }
+
+    public static final int COLUMN_DATA_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList columnData_;
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @return A list containing the columnData.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getColumnDataList() {
+      return columnData_;
+    }
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @return The count of columnData.
+     */
+    public int getColumnDataCount() {
+      return columnData_.size();
+    }
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @param index The index of the element to return.
+     * @return The columnData at the given index.
+     */
+    public java.lang.String getColumnData(int index) {
+      return columnData_.get(index);
+    }
+    /**
+     * <code>repeated string column_data = 2;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the columnData at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getColumnDataBytes(int index) {
+      return columnData_.getByteString(index);
+    }
+
+    public static final int COLUMN_SCHEMA_FIELD_NUMBER = 3;
+    private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> columnSchema_;
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> getColumnSchemaList() {
+      return columnSchema_;
+    }
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> 
+        getColumnSchemaOrBuilderList() {
+      return columnSchema_;
+    }
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    @java.lang.Override
+    public int getColumnSchemaCount() {
+      return columnSchema_.size();
+    }
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.Schema getColumnSchema(int index) {
+      return columnSchema_.get(index);
+    }
+    /**
+     * <code>repeated .sysds.Schema column_schema = 3;</code>
+     */
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder getColumnSchemaOrBuilder(
+        int index) {
+      return columnSchema_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < columnNames_.size(); i++) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, columnNames_.getRaw(i));
+      }
+      for (int i = 0; i < columnData_.size(); i++) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, columnData_.getRaw(i));
+      }
+      for (int i = 0; i < columnSchema_.size(); i++) {
+        output.writeMessage(3, columnSchema_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      {
+        int dataSize = 0;
+        for (int i = 0; i < columnNames_.size(); i++) {
+          dataSize += computeStringSizeNoTag(columnNames_.getRaw(i));
+        }
+        size += dataSize;
+        size += 1 * getColumnNamesList().size();
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < columnData_.size(); i++) {
+          dataSize += computeStringSizeNoTag(columnData_.getRaw(i));
+        }
+        size += dataSize;
+        size += 1 * getColumnDataList().size();
+      }
+      for (int i = 0; i < columnSchema_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, columnSchema_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.sysds.protobuf.SysdsProtos.Row)) {
+        return super.equals(obj);
+      }
+      org.apache.sysds.protobuf.SysdsProtos.Row other = (org.apache.sysds.protobuf.SysdsProtos.Row) obj;
+
+      if (!getColumnNamesList()
+          .equals(other.getColumnNamesList())) return false;
+      if (!getColumnDataList()
+          .equals(other.getColumnDataList())) return false;
+      if (!getColumnSchemaList()
+          .equals(other.getColumnSchemaList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getColumnNamesCount() > 0) {
+        hash = (37 * hash) + COLUMN_NAMES_FIELD_NUMBER;
+        hash = (53 * hash) + getColumnNamesList().hashCode();
+      }
+      if (getColumnDataCount() > 0) {
+        hash = (37 * hash) + COLUMN_DATA_FIELD_NUMBER;
+        hash = (53 * hash) + getColumnDataList().hashCode();
+      }
+      if (getColumnSchemaCount() > 0) {
+        hash = (37 * hash) + COLUMN_SCHEMA_FIELD_NUMBER;
+        hash = (53 * hash) + getColumnSchemaList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Row parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.sysds.protobuf.SysdsProtos.Row prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code sysds.Row}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:sysds.Row)
+        org.apache.sysds.protobuf.SysdsProtos.RowOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.sysds.protobuf.SysdsProtos.Row.class, org.apache.sysds.protobuf.SysdsProtos.Row.Builder.class);
+      }
+
+      // Construct using org.apache.sysds.protobuf.SysdsProtos.Row.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getColumnSchemaFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (columnSchemaBuilder_ == null) {
+          columnSchema_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          columnSchemaBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Row_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Row getDefaultInstanceForType() {
+        return org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Row build() {
+        org.apache.sysds.protobuf.SysdsProtos.Row result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Row buildPartial() {
+        org.apache.sysds.protobuf.SysdsProtos.Row result = new org.apache.sysds.protobuf.SysdsProtos.Row(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          columnNames_ = columnNames_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.columnNames_ = columnNames_;
+        if (((bitField0_ & 0x00000002) != 0)) {
+          columnData_ = columnData_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.columnData_ = columnData_;
+        if (columnSchemaBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            columnSchema_ = java.util.Collections.unmodifiableList(columnSchema_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.columnSchema_ = columnSchema_;
+        } else {
+          result.columnSchema_ = columnSchemaBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.sysds.protobuf.SysdsProtos.Row) {
+          return mergeFrom((org.apache.sysds.protobuf.SysdsProtos.Row)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.sysds.protobuf.SysdsProtos.Row other) {
+        if (other == org.apache.sysds.protobuf.SysdsProtos.Row.getDefaultInstance()) return this;
+        if (!other.columnNames_.isEmpty()) {
+          if (columnNames_.isEmpty()) {
+            columnNames_ = other.columnNames_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureColumnNamesIsMutable();
+            columnNames_.addAll(other.columnNames_);
+          }
+          onChanged();
+        }
+        if (!other.columnData_.isEmpty()) {
+          if (columnData_.isEmpty()) {
+            columnData_ = other.columnData_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureColumnDataIsMutable();
+            columnData_.addAll(other.columnData_);
+          }
+          onChanged();
+        }
+        if (columnSchemaBuilder_ == null) {
+          if (!other.columnSchema_.isEmpty()) {
+            if (columnSchema_.isEmpty()) {
+              columnSchema_ = other.columnSchema_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureColumnSchemaIsMutable();
+              columnSchema_.addAll(other.columnSchema_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.columnSchema_.isEmpty()) {
+            if (columnSchemaBuilder_.isEmpty()) {
+              columnSchemaBuilder_.dispose();
+              columnSchemaBuilder_ = null;
+              columnSchema_ = other.columnSchema_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              columnSchemaBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getColumnSchemaFieldBuilder() : null;
+            } else {
+              columnSchemaBuilder_.addAllMessages(other.columnSchema_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.sysds.protobuf.SysdsProtos.Row parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.sysds.protobuf.SysdsProtos.Row) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private com.google.protobuf.LazyStringList columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureColumnNamesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          columnNames_ = new com.google.protobuf.LazyStringArrayList(columnNames_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @return A list containing the columnNames.
+       */
+      public com.google.protobuf.ProtocolStringList
+          getColumnNamesList() {
+        return columnNames_.getUnmodifiableView();
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @return The count of columnNames.
+       */
+      public int getColumnNamesCount() {
+        return columnNames_.size();
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @param index The index of the element to return.
+       * @return The columnNames at the given index.
+       */
+      public java.lang.String getColumnNames(int index) {
+        return columnNames_.get(index);
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @param index The index of the value to return.
+       * @return The bytes of the columnNames at the given index.
+       */
+      public com.google.protobuf.ByteString
+          getColumnNamesBytes(int index) {
+        return columnNames_.getByteString(index);
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @param index The index to set the value at.
+       * @param value The columnNames to set.
+       * @return This builder for chaining.
+       */
+      public Builder setColumnNames(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnNamesIsMutable();
+        columnNames_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @param value The columnNames to add.
+       * @return This builder for chaining.
+       */
+      public Builder addColumnNames(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnNamesIsMutable();
+        columnNames_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @param values The columnNames to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllColumnNames(
+          java.lang.Iterable<java.lang.String> values) {
+        ensureColumnNamesIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, columnNames_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearColumnNames() {
+        columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_names = 1;</code>
+       * @param value The bytes of the columnNames to add.
+       * @return This builder for chaining.
+       */
+      public Builder addColumnNamesBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        ensureColumnNamesIsMutable();
+        columnNames_.add(value);
+        onChanged();
+        return this;
+      }
+
+      private com.google.protobuf.LazyStringList columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureColumnDataIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          columnData_ = new com.google.protobuf.LazyStringArrayList(columnData_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @return A list containing the columnData.
+       */
+      public com.google.protobuf.ProtocolStringList
+          getColumnDataList() {
+        return columnData_.getUnmodifiableView();
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @return The count of columnData.
+       */
+      public int getColumnDataCount() {
+        return columnData_.size();
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @param index The index of the element to return.
+       * @return The columnData at the given index.
+       */
+      public java.lang.String getColumnData(int index) {
+        return columnData_.get(index);
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @param index The index of the value to return.
+       * @return The bytes of the columnData at the given index.
+       */
+      public com.google.protobuf.ByteString
+          getColumnDataBytes(int index) {
+        return columnData_.getByteString(index);
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @param index The index to set the value at.
+       * @param value The columnData to set.
+       * @return This builder for chaining.
+       */
+      public Builder setColumnData(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnDataIsMutable();
+        columnData_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @param value The columnData to add.
+       * @return This builder for chaining.
+       */
+      public Builder addColumnData(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnDataIsMutable();
+        columnData_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @param values The columnData to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllColumnData(
+          java.lang.Iterable<java.lang.String> values) {
+        ensureColumnDataIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, columnData_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearColumnData() {
+        columnData_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string column_data = 2;</code>
+       * @param value The bytes of the columnData to add.
+       * @return This builder for chaining.
+       */
+      public Builder addColumnDataBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        ensureColumnDataIsMutable();
+        columnData_.add(value);
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> columnSchema_ =
+        java.util.Collections.emptyList();
+      private void ensureColumnSchemaIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          columnSchema_ = new java.util.ArrayList<org.apache.sysds.protobuf.SysdsProtos.Schema>(columnSchema_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.apache.sysds.protobuf.SysdsProtos.Schema, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder, org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> columnSchemaBuilder_;
+
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema> getColumnSchemaList() {
+        if (columnSchemaBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(columnSchema_);
+        } else {
+          return columnSchemaBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public int getColumnSchemaCount() {
+        if (columnSchemaBuilder_ == null) {
+          return columnSchema_.size();
+        } else {
+          return columnSchemaBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Schema getColumnSchema(int index) {
+        if (columnSchemaBuilder_ == null) {
+          return columnSchema_.get(index);
+        } else {
+          return columnSchemaBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder setColumnSchema(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Schema value) {
+        if (columnSchemaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureColumnSchemaIsMutable();
+          columnSchema_.set(index, value);
+          onChanged();
+        } else {
+          columnSchemaBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder setColumnSchema(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder builderForValue) {
+        if (columnSchemaBuilder_ == null) {
+          ensureColumnSchemaIsMutable();
+          columnSchema_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          columnSchemaBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder addColumnSchema(org.apache.sysds.protobuf.SysdsProtos.Schema value) {
+        if (columnSchemaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureColumnSchemaIsMutable();
+          columnSchema_.add(value);
+          onChanged();
+        } else {
+          columnSchemaBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder addColumnSchema(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Schema value) {
+        if (columnSchemaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureColumnSchemaIsMutable();
+          columnSchema_.add(index, value);
+          onChanged();
+        } else {
+          columnSchemaBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder addColumnSchema(
+          org.apache.sysds.protobuf.SysdsProtos.Schema.Builder builderForValue) {
+        if (columnSchemaBuilder_ == null) {
+          ensureColumnSchemaIsMutable();
+          columnSchema_.add(builderForValue.build());
+          onChanged();
+        } else {
+          columnSchemaBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder addColumnSchema(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder builderForValue) {
+        if (columnSchemaBuilder_ == null) {
+          ensureColumnSchemaIsMutable();
+          columnSchema_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          columnSchemaBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder addAllColumnSchema(
+          java.lang.Iterable<? extends org.apache.sysds.protobuf.SysdsProtos.Schema> values) {
+        if (columnSchemaBuilder_ == null) {
+          ensureColumnSchemaIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, columnSchema_);
+          onChanged();
+        } else {
+          columnSchemaBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder clearColumnSchema() {
+        if (columnSchemaBuilder_ == null) {
+          columnSchema_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          columnSchemaBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public Builder removeColumnSchema(int index) {
+        if (columnSchemaBuilder_ == null) {
+          ensureColumnSchemaIsMutable();
+          columnSchema_.remove(index);
+          onChanged();
+        } else {
+          columnSchemaBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Schema.Builder getColumnSchemaBuilder(
+          int index) {
+        return getColumnSchemaFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder getColumnSchemaOrBuilder(
+          int index) {
+        if (columnSchemaBuilder_ == null) {
+          return columnSchema_.get(index);  } else {
+          return columnSchemaBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public java.util.List<? extends org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> 
+           getColumnSchemaOrBuilderList() {
+        if (columnSchemaBuilder_ != null) {
+          return columnSchemaBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(columnSchema_);
+        }
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Schema.Builder addColumnSchemaBuilder() {
+        return getColumnSchemaFieldBuilder().addBuilder(
+            org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Schema.Builder addColumnSchemaBuilder(
+          int index) {
+        return getColumnSchemaFieldBuilder().addBuilder(
+            index, org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sysds.Schema column_schema = 3;</code>
+       */
+      public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.Builder> 
+           getColumnSchemaBuilderList() {
+        return getColumnSchemaFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.apache.sysds.protobuf.SysdsProtos.Schema, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder, org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder> 
+          getColumnSchemaFieldBuilder() {
+        if (columnSchemaBuilder_ == null) {
+          columnSchemaBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              org.apache.sysds.protobuf.SysdsProtos.Schema, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder, org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder>(
+                  columnSchema_,
+                  ((bitField0_ & 0x00000004) != 0),
+                  getParentForChildren(),
+                  isClean());
+          columnSchema_ = null;
+        }
+        return columnSchemaBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:sysds.Row)
+    }
+
+    // @@protoc_insertion_point(class_scope:sysds.Row)
+    private static final org.apache.sysds.protobuf.SysdsProtos.Row DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.sysds.protobuf.SysdsProtos.Row();
+    }
+
+    public static org.apache.sysds.protobuf.SysdsProtos.Row getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Row>
+        PARSER = new com.google.protobuf.AbstractParser<Row>() {
+      @java.lang.Override
+      public Row parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Row(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Row> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Row> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.Row getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SchemaOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:sysds.Schema)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @return A list containing the valueType.
+     */
+    java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> getValueTypeList();
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @return The count of valueType.
+     */
+    int getValueTypeCount();
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @param index The index of the element to return.
+     * @return The valueType at the given index.
+     */
+    org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType getValueType(int index);
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @return A list containing the enum numeric values on the wire for valueType.
+     */
+    java.util.List<java.lang.Integer>
+    getValueTypeValueList();
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of valueType at the given index.
+     */
+    int getValueTypeValue(int index);
+  }
+  /**
+   * Protobuf type {@code sysds.Schema}
+   */
+  public static final class Schema extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:sysds.Schema)
+      SchemaOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Schema.newBuilder() to construct.
+    private Schema(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Schema() {
+      valueType_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Schema();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Schema(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                valueType_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              valueType_.add(rawValue);
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  valueType_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                valueType_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          valueType_ = java.util.Collections.unmodifiableList(valueType_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.sysds.protobuf.SysdsProtos.Schema.class, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder.class);
+    }
+
+    /**
+     * Protobuf enum {@code sysds.Schema.ValueType}
+     */
+    public enum ValueType
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>FP32 = 0;</code>
+       */
+      FP32(0),
+      /**
+       * <code>FP64 = 1;</code>
+       */
+      FP64(1),
+      /**
+       * <code>INT32 = 2;</code>
+       */
+      INT32(2),
+      /**
+       * <code>INT64 = 3;</code>
+       */
+      INT64(3),
+      /**
+       * <code>BOOLEAN = 4;</code>
+       */
+      BOOLEAN(4),
+      /**
+       * <code>STRING = 5;</code>
+       */
+      STRING(5),
+      /**
+       * <code>UNKNOWN = 6;</code>
+       */
+      UNKNOWN(6),
+      UNRECOGNIZED(-1),
+      ;
+
+      /**
+       * <code>FP32 = 0;</code>
+       */
+      public static final int FP32_VALUE = 0;
+      /**
+       * <code>FP64 = 1;</code>
+       */
+      public static final int FP64_VALUE = 1;
+      /**
+       * <code>INT32 = 2;</code>
+       */
+      public static final int INT32_VALUE = 2;
+      /**
+       * <code>INT64 = 3;</code>
+       */
+      public static final int INT64_VALUE = 3;
+      /**
+       * <code>BOOLEAN = 4;</code>
+       */
+      public static final int BOOLEAN_VALUE = 4;
+      /**
+       * <code>STRING = 5;</code>
+       */
+      public static final int STRING_VALUE = 5;
+      /**
+       * <code>UNKNOWN = 6;</code>
+       */
+      public static final int UNKNOWN_VALUE = 6;
+
+
+      public final int getNumber() {
+        if (this == UNRECOGNIZED) {
+          throw new java.lang.IllegalArgumentException(
+              "Can't get the number of an unknown enum value.");
+        }
+        return value;
+      }
+
+      /**
+       * @param value The numeric wire value of the corresponding enum entry.
+       * @return The enum associated with the given numeric wire value.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ValueType valueOf(int value) {
+        return forNumber(value);
+      }
+
+      /**
+       * @param value The numeric wire value of the corresponding enum entry.
+       * @return The enum associated with the given numeric wire value.
+       */
+      public static ValueType forNumber(int value) {
+        switch (value) {
+          case 0: return FP32;
+          case 1: return FP64;
+          case 2: return INT32;
+          case 3: return INT64;
+          case 4: return BOOLEAN;
+          case 5: return STRING;
+          case 6: return UNKNOWN;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<ValueType>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static final com.google.protobuf.Internal.EnumLiteMap<
+          ValueType> internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<ValueType>() {
+              public ValueType findValueByNumber(int number) {
+                return ValueType.forNumber(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        if (this == UNRECOGNIZED) {
+          throw new java.lang.IllegalStateException(
+              "Can't get the descriptor of an unrecognized enum value.");
+        }
+        return getDescriptor().getValues().get(ordinal());
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return org.apache.sysds.protobuf.SysdsProtos.Schema.getDescriptor().getEnumTypes().get(0);
+      }
+
+      private static final ValueType[] VALUES = values();
+
+      public static ValueType valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        if (desc.getIndex() == -1) {
+          return UNRECOGNIZED;
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int value;
+
+      private ValueType(int value) {
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:sysds.Schema.ValueType)
+    }
+
+    public static final int VALUETYPE_FIELD_NUMBER = 1;
+    private java.util.List<java.lang.Integer> valueType_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> valueType_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType>() {
+              public org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType result = org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType.valueOf(from);
+                return result == null ? org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @return A list containing the valueType.
+     */
+    @java.lang.Override
+    public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> getValueTypeList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType>(valueType_, valueType_converter_);
+    }
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @return The count of valueType.
+     */
+    @java.lang.Override
+    public int getValueTypeCount() {
+      return valueType_.size();
+    }
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @param index The index of the element to return.
+     * @return The valueType at the given index.
+     */
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType getValueType(int index) {
+      return valueType_converter_.convert(valueType_.get(index));
+    }
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @return A list containing the enum numeric values on the wire for valueType.
+     */
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getValueTypeValueList() {
+      return valueType_;
+    }
+    /**
+     * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of valueType at the given index.
+     */
+    @java.lang.Override
+    public int getValueTypeValue(int index) {
+      return valueType_.get(index);
+    }
+    private int valueTypeMemoizedSerializedSize;
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (getValueTypeList().size() > 0) {
+        output.writeUInt32NoTag(10);
+        output.writeUInt32NoTag(valueTypeMemoizedSerializedSize);
+      }
+      for (int i = 0; i < valueType_.size(); i++) {
+        output.writeEnumNoTag(valueType_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      {
+        int dataSize = 0;
+        for (int i = 0; i < valueType_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(valueType_.get(i));
+        }
+        size += dataSize;
+        if (!getValueTypeList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }valueTypeMemoizedSerializedSize = dataSize;
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.sysds.protobuf.SysdsProtos.Schema)) {
+        return super.equals(obj);
+      }
+      org.apache.sysds.protobuf.SysdsProtos.Schema other = (org.apache.sysds.protobuf.SysdsProtos.Schema) obj;
+
+      if (!valueType_.equals(other.valueType_)) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getValueTypeCount() > 0) {
+        hash = (37 * hash) + VALUETYPE_FIELD_NUMBER;
+        hash = (53 * hash) + valueType_.hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.sysds.protobuf.SysdsProtos.Schema prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code sysds.Schema}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:sysds.Schema)
+        org.apache.sysds.protobuf.SysdsProtos.SchemaOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.sysds.protobuf.SysdsProtos.Schema.class, org.apache.sysds.protobuf.SysdsProtos.Schema.Builder.class);
+      }
+
+      // Construct using org.apache.sysds.protobuf.SysdsProtos.Schema.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        valueType_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.sysds.protobuf.SysdsProtos.internal_static_sysds_Schema_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Schema getDefaultInstanceForType() {
+        return org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Schema build() {
+        org.apache.sysds.protobuf.SysdsProtos.Schema result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.sysds.protobuf.SysdsProtos.Schema buildPartial() {
+        org.apache.sysds.protobuf.SysdsProtos.Schema result = new org.apache.sysds.protobuf.SysdsProtos.Schema(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          valueType_ = java.util.Collections.unmodifiableList(valueType_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.valueType_ = valueType_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.sysds.protobuf.SysdsProtos.Schema) {
+          return mergeFrom((org.apache.sysds.protobuf.SysdsProtos.Schema)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.sysds.protobuf.SysdsProtos.Schema other) {
+        if (other == org.apache.sysds.protobuf.SysdsProtos.Schema.getDefaultInstance()) return this;
+        if (!other.valueType_.isEmpty()) {
+          if (valueType_.isEmpty()) {
+            valueType_ = other.valueType_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureValueTypeIsMutable();
+            valueType_.addAll(other.valueType_);
+          }
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.sysds.protobuf.SysdsProtos.Schema parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.sysds.protobuf.SysdsProtos.Schema) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<java.lang.Integer> valueType_ =
+        java.util.Collections.emptyList();
+      private void ensureValueTypeIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          valueType_ = new java.util.ArrayList<java.lang.Integer>(valueType_);
+          bitField0_ |= 0x00000001;
+        }
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @return A list containing the valueType.
+       */
+      public java.util.List<org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> getValueTypeList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType>(valueType_, valueType_converter_);
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @return The count of valueType.
+       */
+      public int getValueTypeCount() {
+        return valueType_.size();
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param index The index of the element to return.
+       * @return The valueType at the given index.
+       */
+      public org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType getValueType(int index) {
+        return valueType_converter_.convert(valueType_.get(index));
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param index The index to set the value at.
+       * @param value The valueType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setValueType(
+          int index, org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureValueTypeIsMutable();
+        valueType_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param value The valueType to add.
+       * @return This builder for chaining.
+       */
+      public Builder addValueType(org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureValueTypeIsMutable();
+        valueType_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param values The valueType to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllValueType(
+          java.lang.Iterable<? extends org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType> values) {
+        ensureValueTypeIsMutable();
+        for (org.apache.sysds.protobuf.SysdsProtos.Schema.ValueType value : values) {
+          valueType_.add(value.getNumber());
+        }
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearValueType() {
+        valueType_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @return A list containing the enum numeric values on the wire for valueType.
+       */
+      public java.util.List<java.lang.Integer>
+      getValueTypeValueList() {
+        return java.util.Collections.unmodifiableList(valueType_);
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of valueType at the given index.
+       */
+      public int getValueTypeValue(int index) {
+        return valueType_.get(index);
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of valueType at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setValueTypeValue(
+          int index, int value) {
+        ensureValueTypeIsMutable();
+        valueType_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param value The enum numeric value on the wire for valueType to add.
+       * @return This builder for chaining.
+       */
+      public Builder addValueTypeValue(int value) {
+        ensureValueTypeIsMutable();
+        valueType_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .sysds.Schema.ValueType valueType = 1;</code>
+       * @param values The enum numeric values on the wire for valueType to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllValueTypeValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureValueTypeIsMutable();
+        for (int value : values) {
+          valueType_.add(value);
+        }
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:sysds.Schema)
+    }
+
+    // @@protoc_insertion_point(class_scope:sysds.Schema)
+    private static final org.apache.sysds.protobuf.SysdsProtos.Schema DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.sysds.protobuf.SysdsProtos.Schema();
+    }
+
+    public static org.apache.sysds.protobuf.SysdsProtos.Schema getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Schema>
+        PARSER = new com.google.protobuf.AbstractParser<Schema>() {
+      @java.lang.Override
+      public Schema parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Schema(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Schema> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Schema> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.sysds.protobuf.SysdsProtos.Schema getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_sysds_Frame_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_sysds_Frame_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_sysds_Row_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_sysds_Row_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_sysds_Schema_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_sysds_Schema_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\013Frame.proto\022\005sysds\"!\n\005Frame\022\030\n\004rows\030\001 " +
+      "\003(\0132\n.sysds.Row\"V\n\003Row\022\024\n\014column_names\030\001" +
+      " \003(\t\022\023\n\013column_data\030\002 \003(\t\022$\n\rcolumn_sche" +
+      "ma\030\003 \003(\0132\r.sysds.Schema\"\221\001\n\006Schema\022*\n\tva" +
+      "lueType\030\001 \003(\0162\027.sysds.Schema.ValueType\"[" +
+      "\n\tValueType\022\010\n\004FP32\020\000\022\010\n\004FP64\020\001\022\t\n\005INT32" +
+      "\020\002\022\t\n\005INT64\020\003\022\013\n\007BOOLEAN\020\004\022\n\n\006STRING\020\005\022\013" +
+      "\n\007UNKNOWN\020\006B*\n\031org.apache.sysds.protobuf" +
+      "B\013SysdsProtosP\000b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_sysds_Frame_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_sysds_Frame_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_sysds_Frame_descriptor,
+        new java.lang.String[] { "Rows", });
+    internal_static_sysds_Row_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_sysds_Row_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_sysds_Row_descriptor,
+        new java.lang.String[] { "ColumnNames", "ColumnData", "ColumnSchema", });
+    internal_static_sysds_Schema_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_sysds_Schema_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_sysds_Schema_descriptor,
+        new java.lang.String[] { "ValueType", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
 }
diff --git a/src/main/resources/protobuf/Frame.proto b/src/main/resources/protobuf/Frame.proto
index f459bcf110..6f2d49eff1 100644
--- a/src/main/resources/protobuf/Frame.proto
+++ b/src/main/resources/protobuf/Frame.proto
@@ -1,23 +1,28 @@
-/*
- * 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.
- */
+//-------------------------------------------------------------
+//
+// 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.
+//
+//-------------------------------------------------------------
+
+
 syntax = "proto3";
 package sysds;
+
 option java_package = "org.apache.sysds.protobuf";
 option java_outer_classname = "SysdsProtos";
 option java_multiple_files = false;