简体   繁体   English

Java Spark - 如何从 json 对象生成 structType

[英]Java Spark - how to generate structType from a json object

How do i create a struct type out of a JSON object in java?如何从 Java 中的 JSON 对象创建结构类型? The JSON object in my case is an AVRO schema(i have truncated it below).在我的例子中,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}] }

I prefer not to manually create the StructType object.我不喜欢手动创建 StructType 对象。 I have seen ways to do it Scala, but nothing similar in Java.我已经看到了 Scala 的方法,但在 Java 中没有类似的方法。

With "org.apache.spark" %% "spark-core" % "2.4.5" , "com.databricks" %% "spark-avro" % "3.2.0"使用"org.apache.spark" %% "spark-core" % "2.4.5" , "com.databricks" %% "spark-avro" % "3.2.0"

I was able to convert Json String Schema to AVRO Schema then to Struct Type.我能够将 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();

Note : The newer versions of Spark / Scala have included "com.databricks" %% "spark-avro" by default注意:较新版本的 Spark / Scala 已默认包含"com.databricks" %% "spark-avro"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM