aboutsummaryrefslogtreecommitdiff
path: root/sql/core/src/test/java
diff options
context:
space:
mode:
authorWenchen Fan <wenchen@databricks.com>2015-12-01 10:35:12 -0800
committerMichael Armbrust <michael@databricks.com>2015-12-01 10:35:12 -0800
commitfd95eeaf491809c6bb0f83d46b37b5e2eebbcbca (patch)
tree61ce648ac4d3f3a8c1e3065bad8c6832513fcbe4 /sql/core/src/test/java
parent9df24624afedd993a39ab46c8211ae153aedef1a (diff)
downloadspark-fd95eeaf491809c6bb0f83d46b37b5e2eebbcbca.tar.gz
spark-fd95eeaf491809c6bb0f83d46b37b5e2eebbcbca.tar.bz2
spark-fd95eeaf491809c6bb0f83d46b37b5e2eebbcbca.zip
[SPARK-11954][SQL] Encoder for JavaBeans
create java version of `constructorFor` and `extractorFor` in `JavaTypeInference` Author: Wenchen Fan <wenchen@databricks.com> This patch had conflicts when merged, resolved by Committer: Michael Armbrust <michael@databricks.com> Closes #9937 from cloud-fan/pojo.
Diffstat (limited to 'sql/core/src/test/java')
-rw-r--r--sql/core/src/test/java/test/org/apache/spark/sql/JavaDatasetSuite.java174
1 files changed, 170 insertions, 4 deletions
diff --git a/sql/core/src/test/java/test/org/apache/spark/sql/JavaDatasetSuite.java b/sql/core/src/test/java/test/org/apache/spark/sql/JavaDatasetSuite.java
index 67a3190cb7..ae47f4fe0e 100644
--- a/sql/core/src/test/java/test/org/apache/spark/sql/JavaDatasetSuite.java
+++ b/sql/core/src/test/java/test/org/apache/spark/sql/JavaDatasetSuite.java
@@ -31,14 +31,15 @@ import org.apache.spark.Accumulator;
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.function.*;
import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.sql.Encoder;
-import org.apache.spark.sql.Encoders;
-import org.apache.spark.sql.Dataset;
-import org.apache.spark.sql.GroupedDataset;
+import org.apache.spark.sql.*;
import org.apache.spark.sql.expressions.Aggregator;
import org.apache.spark.sql.test.TestSQLContext;
+import org.apache.spark.sql.catalyst.encoders.OuterScopes;
+import org.apache.spark.sql.catalyst.expressions.GenericRow;
+import org.apache.spark.sql.types.StructType;
import static org.apache.spark.sql.functions.*;
+import static org.apache.spark.sql.types.DataTypes.*;
public class JavaDatasetSuite implements Serializable {
private transient JavaSparkContext jsc;
@@ -506,4 +507,169 @@ public class JavaDatasetSuite implements Serializable {
public void testKryoEncoderErrorMessageForPrivateClass() {
Encoders.kryo(PrivateClassTest.class);
}
+
+ public class SimpleJavaBean implements Serializable {
+ private boolean a;
+ private int b;
+ private byte[] c;
+ private String[] d;
+ private List<String> e;
+ private List<Long> f;
+
+ public boolean isA() {
+ return a;
+ }
+
+ public void setA(boolean a) {
+ this.a = a;
+ }
+
+ public int getB() {
+ return b;
+ }
+
+ public void setB(int b) {
+ this.b = b;
+ }
+
+ public byte[] getC() {
+ return c;
+ }
+
+ public void setC(byte[] c) {
+ this.c = c;
+ }
+
+ public String[] getD() {
+ return d;
+ }
+
+ public void setD(String[] d) {
+ this.d = d;
+ }
+
+ public List<String> getE() {
+ return e;
+ }
+
+ public void setE(List<String> e) {
+ this.e = e;
+ }
+
+ public List<Long> getF() {
+ return f;
+ }
+
+ public void setF(List<Long> f) {
+ this.f = f;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ SimpleJavaBean that = (SimpleJavaBean) o;
+
+ if (a != that.a) return false;
+ if (b != that.b) return false;
+ if (!Arrays.equals(c, that.c)) return false;
+ if (!Arrays.equals(d, that.d)) return false;
+ if (!e.equals(that.e)) return false;
+ return f.equals(that.f);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (a ? 1 : 0);
+ result = 31 * result + b;
+ result = 31 * result + Arrays.hashCode(c);
+ result = 31 * result + Arrays.hashCode(d);
+ result = 31 * result + e.hashCode();
+ result = 31 * result + f.hashCode();
+ return result;
+ }
+ }
+
+ public class NestedJavaBean implements Serializable {
+ private SimpleJavaBean a;
+
+ public SimpleJavaBean getA() {
+ return a;
+ }
+
+ public void setA(SimpleJavaBean a) {
+ this.a = a;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ NestedJavaBean that = (NestedJavaBean) o;
+
+ return a.equals(that.a);
+ }
+
+ @Override
+ public int hashCode() {
+ return a.hashCode();
+ }
+ }
+
+ @Test
+ public void testJavaBeanEncoder() {
+ OuterScopes.addOuterScope(this);
+ SimpleJavaBean obj1 = new SimpleJavaBean();
+ obj1.setA(true);
+ obj1.setB(3);
+ obj1.setC(new byte[]{1, 2});
+ obj1.setD(new String[]{"hello", null});
+ obj1.setE(Arrays.asList("a", "b"));
+ obj1.setF(Arrays.asList(100L, null, 200L));
+ SimpleJavaBean obj2 = new SimpleJavaBean();
+ obj2.setA(false);
+ obj2.setB(30);
+ obj2.setC(new byte[]{3, 4});
+ obj2.setD(new String[]{null, "world"});
+ obj2.setE(Arrays.asList("x", "y"));
+ obj2.setF(Arrays.asList(300L, null, 400L));
+
+ List<SimpleJavaBean> data = Arrays.asList(obj1, obj2);
+ Dataset<SimpleJavaBean> ds = context.createDataset(data, Encoders.bean(SimpleJavaBean.class));
+ Assert.assertEquals(data, ds.collectAsList());
+
+ NestedJavaBean obj3 = new NestedJavaBean();
+ obj3.setA(obj1);
+
+ List<NestedJavaBean> data2 = Arrays.asList(obj3);
+ Dataset<NestedJavaBean> ds2 = context.createDataset(data2, Encoders.bean(NestedJavaBean.class));
+ Assert.assertEquals(data2, ds2.collectAsList());
+
+ Row row1 = new GenericRow(new Object[]{
+ true,
+ 3,
+ new byte[]{1, 2},
+ new String[]{"hello", null},
+ Arrays.asList("a", "b"),
+ Arrays.asList(100L, null, 200L)});
+ Row row2 = new GenericRow(new Object[]{
+ false,
+ 30,
+ new byte[]{3, 4},
+ new String[]{null, "world"},
+ Arrays.asList("x", "y"),
+ Arrays.asList(300L, null, 400L)});
+ StructType schema = new StructType()
+ .add("a", BooleanType, false)
+ .add("b", IntegerType, false)
+ .add("c", BinaryType)
+ .add("d", createArrayType(StringType))
+ .add("e", createArrayType(StringType))
+ .add("f", createArrayType(LongType));
+ Dataset<SimpleJavaBean> ds3 = context.createDataFrame(Arrays.asList(row1, row2), schema)
+ .as(Encoders.bean(SimpleJavaBean.class));
+ Assert.assertEquals(data, ds3.collectAsList());
+ }
}