Repository: incubator-systemml
Updated Branches:
  refs/heads/master 4481346f9 -> 8d5f3ceab


[SYSTEMML-925] Performance frame block serialization w/ default metadata

Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/0e8f1e18
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/0e8f1e18
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/0e8f1e18

Branch: refs/heads/master
Commit: 0e8f1e1863aa53f77220254051b75cc8c3ce670c
Parents: 4481346
Author: Matthias Boehm <mbo...@us.ibm.com>
Authored: Fri Sep 16 23:17:47 2016 +0200
Committer: Matthias Boehm <mbo...@us.ibm.com>
Committed: Sat Sep 17 00:25:16 2016 -0700

----------------------------------------------------------------------
 .../sysml/runtime/matrix/data/FrameBlock.java   | 44 ++++++++++++++++----
 1 file changed, 35 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/0e8f1e18/src/main/java/org/apache/sysml/runtime/matrix/data/FrameBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/FrameBlock.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/FrameBlock.java
index 1c8ffd0..8e68014 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/FrameBlock.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/FrameBlock.java
@@ -305,6 +305,26 @@ public class FrameBlock implements Writable, CacheBlock, 
Externalizable
        
        /**
         * 
+        * @return
+        */
+       public boolean isColNamesDefault() {
+               boolean ret = true;
+               for( int j=0; j<getNumColumns() && ret; j++ )
+                       ret &= isColNameDefault(j);
+               return ret;     
+       }
+       
+       /**
+        * 
+        * @param i
+        * @return
+        */
+       public boolean isColNameDefault(int i) {
+               return _colnames.get(i).equals("C"+i);
+       }
+       
+       /**
+        * 
         */
        public void recomputeColumnCardinality() {
                for( int j=0; j<getNumColumns(); j++ ) {
@@ -510,16 +530,21 @@ public class FrameBlock implements Writable, CacheBlock, 
Externalizable
        
        @Override
        public void write(DataOutput out) throws IOException {
-               //write header (rows, cols)
+               boolean isDefaultMeta = isColNamesDefault()
+                               && isColumnMetadataDefault();
+               //write header (rows, cols, default)
                out.writeInt(getNumRows());
                out.writeInt(getNumColumns());
+               out.writeBoolean(isDefaultMeta);
                //write columns (value type, data)
                for( int j=0; j<getNumColumns(); j++ ) {
                        out.writeByte(_schema.get(j).ordinal());
-                       out.writeUTF(_colnames.get(j));
-                       out.writeLong(_colmeta.get(j).getNumDistinct());
-                       out.writeUTF( (_colmeta.get(j).getMvValue()!=null) ? 
-                                       _colmeta.get(j).getMvValue() : "" );
+                       if( !isDefaultMeta ) {
+                               out.writeUTF(_colnames.get(j));
+                               out.writeLong(_colmeta.get(j).getNumDistinct());
+                               out.writeUTF( 
(_colmeta.get(j).getMvValue()!=null) ? 
+                                               _colmeta.get(j).getMvValue() : 
"" );
+                       }
                        _coldata.get(j).write(out);
                }
        }
@@ -529,15 +554,16 @@ public class FrameBlock implements Writable, CacheBlock, 
Externalizable
                //read head (rows, cols)
                _numRows = in.readInt();
                int numCols = in.readInt();
+               boolean isDefaultMeta = in.readBoolean();
                //read columns (value type, meta, data)
                _schema.clear();
                _colmeta.clear();
                _coldata.clear();
                for( int j=0; j<numCols; j++ ) {
                        ValueType vt = ValueType.values()[in.readByte()];
-                       String name = in.readUTF();
-                       long ndistinct = in.readLong();
-                       String mvvalue = in.readUTF();
+                       String name = isDefaultMeta ? createColName(j) : 
in.readUTF();
+                       long ndistinct = isDefaultMeta ? 0 : in.readLong();
+                       String mvvalue = isDefaultMeta ? null : in.readUTF();
                        Array arr = null;
                        switch( vt ) {
                                case STRING:  arr = new StringArray(new 
String[_numRows]); break;
@@ -550,7 +576,7 @@ public class FrameBlock implements Writable, CacheBlock, 
Externalizable
                        _schema.add(vt);
                        _colnames.add(name);
                        _colmeta.add(new ColumnMetadata(ndistinct, 
-                                       mvvalue.isEmpty() ? null : mvvalue));
+                                       (mvvalue==null || mvvalue.isEmpty()) ? 
null : mvvalue));
                        _coldata.add(arr);
                }
        }

Reply via email to