aboutsummaryrefslogtreecommitdiff
path: root/unsafe
diff options
context:
space:
mode:
authorDavies Liu <davies@databricks.com>2015-08-01 21:50:42 -0700
committerDavies Liu <davies.liu@gmail.com>2015-08-01 21:50:42 -0700
commit57084e0c7c318912208ee31c52d61c14eeddd8f4 (patch)
tree0e43e0f2a10008b8f279d95099a6cc38e72afb7d /unsafe
parentc1b0cbd762d78bedca0ab564cf9ca0970b7b99d2 (diff)
downloadspark-57084e0c7c318912208ee31c52d61c14eeddd8f4.tar.gz
spark-57084e0c7c318912208ee31c52d61c14eeddd8f4.tar.bz2
spark-57084e0c7c318912208ee31c52d61c14eeddd8f4.zip
[SPARK-9459] [SQL] use generated FromUnsafeProjection to do deep copy for UTF8String and struct
When accessing a column in UnsafeRow, it's good to avoid the copy, then we should do deep copy when turn the UnsafeRow into generic Row, this PR brings generated FromUnsafeProjection to do that. This PR also fix the expressions that cache the UTF8String, which should also copy it. Author: Davies Liu <davies@databricks.com> Closes #7840 from davies/avoid_copy and squashes the following commits: 230c8a1 [Davies Liu] address comment fd797c9 [Davies Liu] Merge branch 'master' of github.com:apache/spark into avoid_copy e095dd0 [Davies Liu] rollback rename 8ef5b0b [Davies Liu] copy String in Columnar 81360b8 [Davies Liu] fix class name 9aecb88 [Davies Liu] use FromUnsafeProjection to do deep copy for UTF8String and struct
Diffstat (limited to 'unsafe')
-rw-r--r--unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java13
1 files changed, 12 insertions, 1 deletions
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java b/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java
index 213dc761bb..916825d007 100644
--- a/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java
+++ b/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java
@@ -79,6 +79,17 @@ public final class UTF8String implements Comparable<UTF8String>, Serializable {
}
/**
+ * Creates an UTF8String from given address (base and offset) and length.
+ */
+ public static UTF8String fromAddress(Object base, long offset, int numBytes) {
+ if (base != null) {
+ return new UTF8String(base, offset, numBytes);
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Creates an UTF8String from String.
*/
public static UTF8String fromString(String str) {
@@ -437,7 +448,7 @@ public final class UTF8String implements Comparable<UTF8String>, Serializable {
while (i < numBytes) {
int len = numBytesForFirstByte(getByte(i));
copyMemory(this.base, this.offset + i, result,
- BYTE_ARRAY_OFFSET + result.length - i - len, len);
+ BYTE_ARRAY_OFFSET + result.length - i - len, len);
i += len;
}