Java Spark - 如何从 json 对象生成 structType
Java Spark - how to generate structType from a json object
如何从 java 中的 JSON 对象创建结构类型? JSON 对象在我的例子中是一个 AVRO 模式(我在下面截断了它)。
{\"type\":\"record\",\"name\":\"DataRecord\",\"namespace\":\"com.mycode\",\"fields\":[{\"name\":\"data\",\"type\":{\"type\":\"record\",\"name\":\"Data\",
\"fields\":[{\"name\":\"COUNT\",\"type\":[{\"type\":\"null\"},{\"type\":\"int\"}],\"default\":null},{\"name\":\"VALUE\",\"type\":[{\"type\":\"null\"},{\"type\":\"int\"}],\"default\":null}] }
我不想手动创建 StructType 对象。我已经看到了 Scala 的方法,但在 Java.
中没有类似的方法
与"org.apache.spark" %% "spark-core" % "2.4.5"
、"com.databricks" %% "spark-avro" % "3.2.0"
我能够将 Json String Schema 转换为 AVRO Schema,然后再转换为 Struct Type。
import org.apache.avro.Schema;
import org.apache.spark.sql.types.StructType;
import com.databricks.spark.avro.SchemaConverters;
String schemaStr ="{ \"type\" : \"record\", \"name\" : \"test_schema\", \"namespace\" : \"com.test.avro\", \"fields\" : [ { \"name\" : \"username\", \"type\" : \"string\", \"doc\" : \"blah blah\" }, { \"name\" : \"tweet\", \"type\" : \"string\", \"doc\" : \"test\" }, { \"name\" : \"timestamp\", \"type\" : \"long\", \"doc\" : \"test\" } ], \"doc:\" : \"test\" }";
Schema schema = Schema.parse(schemaStr);
StructType requiredType = (StructType) SchemaConverters.toSqlType(schema).dataType();
注意:较新版本的 Spark / Scala 默认包含 "com.databricks" %% "spark-avro"
如何从 java 中的 JSON 对象创建结构类型? JSON 对象在我的例子中是一个 AVRO 模式(我在下面截断了它)。
{\"type\":\"record\",\"name\":\"DataRecord\",\"namespace\":\"com.mycode\",\"fields\":[{\"name\":\"data\",\"type\":{\"type\":\"record\",\"name\":\"Data\",
\"fields\":[{\"name\":\"COUNT\",\"type\":[{\"type\":\"null\"},{\"type\":\"int\"}],\"default\":null},{\"name\":\"VALUE\",\"type\":[{\"type\":\"null\"},{\"type\":\"int\"}],\"default\":null}] }
我不想手动创建 StructType 对象。我已经看到了 Scala 的方法,但在 Java.
中没有类似的方法与"org.apache.spark" %% "spark-core" % "2.4.5"
、"com.databricks" %% "spark-avro" % "3.2.0"
我能够将 Json String Schema 转换为 AVRO Schema,然后再转换为 Struct Type。
import org.apache.avro.Schema;
import org.apache.spark.sql.types.StructType;
import com.databricks.spark.avro.SchemaConverters;
String schemaStr ="{ \"type\" : \"record\", \"name\" : \"test_schema\", \"namespace\" : \"com.test.avro\", \"fields\" : [ { \"name\" : \"username\", \"type\" : \"string\", \"doc\" : \"blah blah\" }, { \"name\" : \"tweet\", \"type\" : \"string\", \"doc\" : \"test\" }, { \"name\" : \"timestamp\", \"type\" : \"long\", \"doc\" : \"test\" } ], \"doc:\" : \"test\" }";
Schema schema = Schema.parse(schemaStr);
StructType requiredType = (StructType) SchemaConverters.toSqlType(schema).dataType();
注意:较新版本的 Spark / Scala 默认包含 "com.databricks" %% "spark-avro"