2017-11-15 10 views
0

以下のjsonがスキーマを読み取るためのスキーマを作成する方法。私はhiveContext.read.schema()。json( "input.json")を使用しています。最初の2つの "ErrorMessage"と "IsError"読み取り専用レポートは無視します。 以下はJSONです:構造体の配列のSpark SQLのスキーマを作成するには?

val schema = StructType(
      Array(
        StructField("Report", StructType(
        Array(
                StructField 
                ("tl",ArrayType(StructType(Array(
                    StructField("TlID", StringType), 
                    StructField("CID", IntegerType) 
                   ))))))))) 

Below is my json.printSchema() : 
root 
|-- Report: struct (nullable = true) 
| |-- tl: array (nullable = true) 
| | |-- element: struct (containsNull = true) 
| | | |-- TlID: string (nullable = true) 
| | | |-- CID: integer (nullable = true) 

答えて

0

スキーマは正しくありません。

{ 
    "ErrorMessage": null, 
    "IsError": false, 
    "Report":{ 
     "tl":[ 
     { 
      "TlID":"F6", 
      "CID":"mo" 
     }, 
     { 
      "TlID":"Fk", 
      "CID":"mo" 
     } 
     ] 
    } 
} 

が、私は以下のスキーマを作成しました。あなたのデータの CIDは明らかに String"mo")ではありません。

val schema = StructType(Array(
    StructField("Report", StructType(
    Array(
     StructField 
     ("tl",ArrayType(StructType(Array(
         StructField("CID", StringType), 
         StructField("TlID", StringType) 
         ))))))))) 

と使用:

val df = Seq("""{ 
    "ErrorMessage": null, 
    "IsError": false, 
    "Report":{ 
     "tl":[ 
     { 
      "TlID":"F6", 
      "CID":"mo" 
     }, 
     { 
      "TlID":"Fk", 
      "CID":"mo" 
     } 
     ] 
    } 
}""").toDS 

spark.read.schema(schema).json(df).show(false) 
+--------------------------------+ 
|Report       | 
+--------------------------------+ 
|[WrappedArray([mo,F6], [mo,Fk])]| 
+--------------------------------+ 
+0

を私はStringTypeにCIDを変更しましたが、私は()を示し行うとき、それは "ヌル" を返します – Divya

関連する問題