You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2017/10/12 08:12:45 UTC
[3/5] systemml git commit: [SYSTEMML-1956] Fix robustness frame rbind
w/ mismatching schemas
[SYSTEMML-1956] Fix robustness frame rbind w/ mismatching schemas
This patch makes the frame rbind more robust by allowing graceful schema
conversions. We now try - in a best effort manner - to convert the
values of the second input into the types of the first input, which
determine the schema of the output.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/deb4baf0
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/deb4baf0
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/deb4baf0
Branch: refs/heads/master
Commit: deb4baf06c3a9d204523dc868f72ea23e307f4c4
Parents: 92bad9e
Author: Matthias Boehm <mb...@gmail.com>
Authored: Wed Oct 11 17:12:31 2017 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Thu Oct 12 01:13:07 2017 -0700
----------------------------------------------------------------------
.../sysml/runtime/matrix/data/FrameBlock.java | 31 ++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/deb4baf0/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 6079956..23dbd8b 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
@@ -554,6 +554,20 @@ public class FrameBlock implements Writable, CacheBlock, Externalizable
}
/**
+ * Get a row iterator over the frame where all fields are encoded
+ * as boxed objects according to the value types of the provided
+ * target schema.
+ *
+ * @param schema target schema of objects
+ * @return object array iterator
+ */
+ public Iterator<Object[]> getObjectRowIterator(ValueType[] schema) {
+ ObjectRowIterator iter = new ObjectRowIterator(0, _numRows);
+ iter.setSchema(schema);
+ return iter;
+ }
+
+ /**
* Get a row iterator over the frame where all selected fields are
* encoded as boxed objects according to their value types.
*
@@ -992,7 +1006,7 @@ public class FrameBlock implements Writable, CacheBlock, Externalizable
ret._coldata = new Array[getNumColumns()];
for( int j=0; j<getNumColumns(); j++ )
ret._coldata[j] = _coldata[j].clone();
- Iterator<Object[]> iter = that.getObjectRowIterator();
+ Iterator<Object[]> iter = that.getObjectRowIterator(_schema);
while( iter.hasNext() )
ret.appendRow(iter.next());
}
@@ -1221,6 +1235,8 @@ public class FrameBlock implements Writable, CacheBlock, Externalizable
}
private class ObjectRowIterator extends RowIterator<Object> {
+ private ValueType[] _tgtSchema = null;
+
public ObjectRowIterator(int rl, int ru) {
super(rl, ru);
}
@@ -1229,6 +1245,10 @@ public class FrameBlock implements Writable, CacheBlock, Externalizable
super(rl, ru, cols);
}
+ public void setSchema(ValueType[] schema) {
+ _tgtSchema = schema;
+ }
+
@Override
protected Object[] createRow(int size) {
return new Object[size];
@@ -1237,10 +1257,17 @@ public class FrameBlock implements Writable, CacheBlock, Externalizable
@Override
public Object[] next( ) {
for( int j=0; j<_cols.length; j++ )
- _curRow[j] = get(_curPos, _cols[j]-1);
+ _curRow[j] = getValue(_curPos, _cols[j]-1);
_curPos++;
return _curRow;
}
+
+ private Object getValue(int i, int j) {
+ Object val = get(i, j);
+ if( _tgtSchema != null )
+ val = UtilFunctions.objectToObject(_tgtSchema[j], val);
+ return val;
+ }
}
///////