2017-07-10 6 views
3

XMLとして提供されるデータセットがあり、ノードの1つにJSONが含まれています。 SparkはこれをStringTypeとして読み込んでいるので、from_json()を使用してJSONをDataFrameに変換しようとしています。スパークfrom_json - StructTypeとArrayType

JSONの文字列を変換できますが、配列を操作するためのスキーマを作成するにはどうすればよいですか?アレイなし

文字列 - アレイとうまく

import org.apache.spark.sql.functions._ 

val schemaExample = new StructType() 
      .add("FirstName", StringType) 
      .add("Surname", StringType) 

val dfExample = spark.sql("""select "{ \"FirstName\":\"Johnny\", \"Surname\":\"Boy\" }" as theJson""") 

val dfICanWorkWith = dfExample.select(from_json($"theJson", schemaExample)) 

dfICanWorkWith.collect() 

// Results \\ 
res19: Array[org.apache.spark.sql.Row] = Array([[Johnny,Boy]]) 

作業文字列 - 問題は、あなたが完全修飾JSONを持っていないということです

import org.apache.spark.sql.functions._ 

val schemaExample2 = new StructType() 
           .add("", ArrayType(new StructType() 
                  .add("FirstName", StringType) 
                  .add("Surname", StringType) 
               ) 
           ) 

val dfExample2= spark.sql("""select "[{ \"FirstName\":\"Johnny\", \"Surname\":\"Boy\" }, { \"FirstName\":\"Franky\", \"Surname\":\"Man\" }" as theJson""") 

val dfICanWorkWith = dfExample2.select(from_json($"theJson", schemaExample2)) 

dfICanWorkWith.collect() 

// Result \\ 
res22: Array[org.apache.spark.sql.Row] = Array([null]) 

答えて

6

を、このいずれかを把握することはできません。あなたのJSONは物事のカップルが欠落しています。

  • まず、あなたは、あなたが「」としてそれを設定しても追加しませんでした(変数値が欠落しているJSONを
  • 第二に行われている周囲の{}欠けていますそれ)
  • 最後に、あなたが閉鎖を欠けている]

とそれを交換してみてください:

val dfExample2= spark.sql("""select "{\"\":[{ \"FirstName\":\"Johnny\", \"Surname\":\"Boy\" }, { \"FirstName\":\"Franky\", \"Surname\":\"Man\" }]}" as theJson""") 

、あなたのw得意先:

関連する問題