// https://github.com/apache/spark/blob/0494dc90af48ce7da0625485a4dc6917a244d580/sql/catalyst/src/main/scala/org/apache/spark/sql/types/DataType.scala#L200 function sparkJsonSchemaToStructTypeSource(json) { const types = ["string", "long", "double", "float", "boolean"]; if (typeof json === "string") return `${json[0].toUpperCase()}${json.slice(1)}Type`; switch (json.type) { case "array": return `ArrayType(${sparkJsonSchemaToStructTypeSource( json.elementType )}, containsNull = ${json.containsNull})`; case "struct": return `StructType(Array(${json.fields .map( (f) => `StructField("${f.name}", ${sparkJsonSchemaToStructTypeSource( f.type )}, nullable = ${f.nullable})` ) .join(", ")}))`; case "map": return `MapType(${sparkJsonSchemaToStructTypeSource( json.keyType )}, ${sparkJsonSchemaToStructTypeSource( json.valueType )}, valueContainsNull = ${json.valueContainsNull})`; default: console.error(json); throw new Error("Unknown type " + json.type); } }