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

mboehm7 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemml.git


The following commit(s) were added to refs/heads/master by this push:
     new 0c23e1f  [SYSTEMML-2509] Fix transform binning metadata frame 
allocation
0c23e1f is described below

commit 0c23e1fa194d37d67e0490c2894519b0ea6720e4
Author: Matthias Boehm <[email protected]>
AuthorDate: Wed Feb 13 11:52:19 2019 +0100

    [SYSTEMML-2509] Fix transform binning metadata frame allocation
    
    This patch fixes special cases where binning is the only transformation
    or where it requires the most metadata rows (e.g., more than recoding),
    for which cases so far the output metadata frame was not properly
    allocated.
---
 .../org/apache/sysml/runtime/matrix/data/FrameBlock.java     | 12 ++++++++++--
 .../apache/sysml/runtime/transform/encode/EncoderBin.java    |  6 ++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

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 87c6aca..ef16feb 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
@@ -248,8 +248,16 @@ public class FrameBlock implements Writable, CacheBlock, 
Externalizable
         */
        public void ensureAllocatedColumns(int numRows) {
                //early abort if already allocated
-               if( _coldata != null && _schema.length == _coldata.length ) 
-                       return;         
+               if( _coldata != null && _schema.length == _coldata.length ) {
+                       //handle special case that to few rows allocated
+                       if( _numRows < numRows ) {
+                               String[] tmp = new String[getNumColumns()];
+                               int len = numRows - _numRows;
+                               for(int i=0; i<len; i++)
+                                       appendRow(tmp);
+                       }
+                       return;
+               }
                //allocate column meta data if necessary
                if( _colmeta == null || _schema.length != _colmeta.length ) {
                        _colmeta = new ColumnMetadata[_schema.length];
diff --git 
a/src/main/java/org/apache/sysml/runtime/transform/encode/EncoderBin.java 
b/src/main/java/org/apache/sysml/runtime/transform/encode/EncoderBin.java
index 2f94003..96fcc06 100644
--- a/src/main/java/org/apache/sysml/runtime/transform/encode/EncoderBin.java
+++ b/src/main/java/org/apache/sysml/runtime/transform/encode/EncoderBin.java
@@ -124,6 +124,12 @@ public class EncoderBin extends Encoder
 
        @Override
        public FrameBlock getMetaData(FrameBlock meta) {
+               //allocate frame if necessary
+               int maxLength = 0;
+               for( int j=0; j<_colList.length; j++ )
+                       maxLength = Math.max(maxLength, _binMaxs[j].length);
+               meta.ensureAllocatedColumns(maxLength);
+               
                //serialize the internal state into frame meta data
                for( int j=0; j<_colList.length; j++ ) {
                        int colID = _colList[j]; //1-based

Reply via email to