Skip to content

Commit 905bb89

Browse files
committed
java conversions
1 parent 618e349 commit 905bb89

File tree

5 files changed

+44
-10
lines changed

5 files changed

+44
-10
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/namedExpressions.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ case class AttributeReference(
134134
var h = 17
135135
h = h * 37 + exprId.hashCode()
136136
h = h * 37 + dataType.hashCode()
137+
h = h * 37 + metadata.hashCode()
137138
h
138139
}
139140

sql/core/src/main/java/org/apache/spark/sql/api/java/DataType.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717

1818
package org.apache.spark.sql.api.java;
1919

20-
import java.util.HashSet;
21-
import java.util.List;
22-
import java.util.Set;
20+
import java.util.*;
2321

2422
/**
2523
* The base type of all Spark SQL data types.
@@ -146,15 +144,31 @@ public static MapType createMapType(
146144
* Creates a StructField by specifying the name ({@code name}), data type ({@code dataType}) and
147145
* whether values of this field can be null values ({@code nullable}).
148146
*/
149-
public static StructField createStructField(String name, DataType dataType, boolean nullable) {
147+
public static StructField createStructField(
148+
String name,
149+
DataType dataType,
150+
boolean nullable,
151+
Map<String, Object> metadata) {
150152
if (name == null) {
151153
throw new IllegalArgumentException("name should not be null.");
152154
}
153155
if (dataType == null) {
154156
throw new IllegalArgumentException("dataType should not be null.");
155157
}
158+
if (metadata == null) {
159+
throw new IllegalArgumentException("metadata should not be null.");
160+
}
161+
162+
return new StructField(name, dataType, nullable, metadata);
163+
}
156164

157-
return new StructField(name, dataType, nullable);
165+
/**
166+
* Creates a StructField with empty metadata.
167+
*
168+
* @see #createStructField(String, DataType, boolean, java.util.Map)
169+
*/
170+
public static StructField createStructField(String name, DataType dataType, boolean nullable) {
171+
return createStructField(name, dataType, nullable, new HashMap<String, Object>());
158172
}
159173

160174
/**

sql/core/src/main/java/org/apache/spark/sql/api/java/StructField.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,37 @@
1717

1818
package org.apache.spark.sql.api.java;
1919

20+
import java.util.Map;
21+
2022
/**
2123
* A StructField object represents a field in a StructType object.
2224
* A StructField object comprises three fields, {@code String name}, {@code DataType dataType},
2325
* and {@code boolean nullable}. The field of {@code name} is the name of a StructField.
2426
* The field of {@code dataType} specifies the data type of a StructField.
2527
* The field of {@code nullable} specifies if values of a StructField can contain {@code null}
2628
* values.
29+
* The field of {@code metadata} provides extra information of the StructField, which is a map from
30+
* string to simple type that can be serialized to JSON automatically
2731
*
2832
* To create a {@link StructField},
29-
* {@link DataType#createStructField(String, DataType, boolean)}
33+
* {@link DataType#createStructField(String, DataType, boolean, Map)}
3034
* should be used.
3135
*/
3236
public class StructField {
3337
private String name;
3438
private DataType dataType;
3539
private boolean nullable;
40+
private Map<String, Object> metadata;
3641

37-
protected StructField(String name, DataType dataType, boolean nullable) {
42+
protected StructField(
43+
String name,
44+
DataType dataType,
45+
boolean nullable,
46+
Map<String, Object> metadata) {
3847
this.name = name;
3948
this.dataType = dataType;
4049
this.nullable = nullable;
50+
this.metadata = metadata;
4151
}
4252

4353
public String getName() {
@@ -52,6 +62,10 @@ public boolean isNullable() {
5262
return nullable;
5363
}
5464

65+
public Map<String, Object> getMetadata() {
66+
return metadata;
67+
}
68+
5569
@Override
5670
public boolean equals(Object o) {
5771
if (this == o) return true;
@@ -62,6 +76,7 @@ public boolean equals(Object o) {
6276
if (nullable != that.nullable) return false;
6377
if (!dataType.equals(that.dataType)) return false;
6478
if (!name.equals(that.name)) return false;
79+
if (!metadata.equals(that.metadata)) return false;
6580

6681
return true;
6782
}
@@ -71,6 +86,7 @@ public int hashCode() {
7186
int result = name.hashCode();
7287
result = 31 * result + dataType.hashCode();
7388
result = 31 * result + (nullable ? 1 : 0);
89+
result = 31 * result + metadata.hashCode();
7490
return result;
7591
}
7692
}

sql/core/src/main/scala/org/apache/spark/sql/types/util/DataTypeConversions.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ protected[sql] object DataTypeConversions {
3131
JDataType.createStructField(
3232
scalaStructField.name,
3333
asJavaDataType(scalaStructField.dataType),
34-
scalaStructField.nullable)
34+
scalaStructField.nullable,
35+
scalaStructField.metadata.asJava.asInstanceOf[java.util.Map[String, Object]])
3536
}
3637

3738
/**
@@ -67,7 +68,8 @@ protected[sql] object DataTypeConversions {
6768
StructField(
6869
javaStructField.getName,
6970
asScalaDataType(javaStructField.getDataType),
70-
javaStructField.isNullable)
71+
javaStructField.isNullable,
72+
javaStructField.getMetadata.asScala.toMap)
7173
}
7274

7375
/**

sql/core/src/test/scala/org/apache/spark/sql/api/java/ScalaSideDataTypeConversionSuite.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ class ScalaSideDataTypeConversionSuite extends FunSuite {
7070
SStructField("simpleArray", simpleScalaArrayType, true) ::
7171
SStructField("simpleMap", simpleScalaMapType, true) ::
7272
SStructField("simpleStruct", simpleScalaStructType, true) ::
73-
SStructField("boolean", org.apache.spark.sql.BooleanType, false) :: Nil)
73+
SStructField("boolean", org.apache.spark.sql.BooleanType, false) ::
74+
SStructField("withMeta", org.apache.spark.sql.DoubleType, false, Map("name" -> "age")) :: Nil)
7475
checkDataType(complexScalaStructType)
7576

7677
// Complex ArrayType.

0 commit comments

Comments
 (0)