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"