2017-11-23 17 views
0

私はマルチラインのjsonファイルを持っていますが、jsonを読むためにsparkのread.jsonを使用していますが、問題はそのjsonファイルの最初のオブジェクトを読み取るだけですread.jsonはSparkの最初のオブジェクトを読み取るだけです

val dataFrame = spark.read.option("multiLine", true).option("mode", "PERMISSIVE").json(path) 
dataFrame.rdd.saveAsTextFile("DataFrame") 

サンプルJSON:

{ 
    "_id" : "589895e123c572923e69f5e7", 
    "thing" : "54eb45beb5f1e061454c5bf4", 
    "timeline" : [ 
     { 
      "reason" : "TRIP_START", 
      "timestamp" : "2017-02-06T17:20:18.007+02:00", 
      "type" : "TRIP_EVENT", 
      "location" : [ 
       11.1174091, 
       69.1174091 
      ], 
      "endLocation" : [], 
      "startLocation" : [] 
     }, 
      "reason" : "TRIP_END", 
      "timestamp" : "2017-02-06T17:25:26.026+02:00", 
      "type" : "TRIP_EVENT", 
      "location" : [ 
       11.5691428, 
       48.1122443 
      ], 
      "endLocation" : [], 
      "startLocation" : [] 
     } 
    ], 
    "__v" : 0 
} 
{ 
    "_id" : "589895e123c572923e69f5e8", 
    "thing" : "54eb45beb5f1e032241c5bf4", 
    "timeline" : [ 
     { 
      "reason" : "TRIP_START", 
      "timestamp" : "2017-02-06T17:20:18.007+02:00", 
      "type" : "TRIP_EVENT", 
      "location" : [ 
       11.1174091, 
       50.1174091 
      ], 
      "endLocation" : [], 
      "startLocation" : [] 
     }, 
      "reason" : "TRIP_END", 
      "timestamp" : "2017-02-06T17:25:26.026+02:00", 
      "type" : "TRIP_EVENT", 
      "location" : [ 
       51.1174091, 
       69.1174091 
      ], 
      "endLocation" : [], 
      "startLocation" : [] 
     } 
    ], 
    "__v" : 0 
} 

私はID = 589895e123c572923e69f5e7を持つ唯一の最初のエントリを取得します。

私が間違っていることはありますか?

答えて

1

あなたは本当ですか複数マルチラインJSONに対応していますか?

各行は真

http://spark.apache.org/docs/latest/sql-programming-guide.html#json-datasets

に複数行のオプションを設定し、定期的なマルチラインJSONファイルについて...別の、自己完結型の有効なJSONオブジェクトが含まれている必要があります「通常のJSONファイル」とは、ファイル全体が単一のJSONオブジェクト/配列であることを意味しますが、すべてのオブジェクトにキーが必要なため、単に{}をデータの周りに置くことはできません。したがって、トップレベルのキーたとえば"objects"とします。同様に、配列を試すこともできますが、[]でラップします。いずれにしても、配列やオブジェクト内のすべてのオブジェクトがコンマで区切られている場合にのみ機能します。

TL; DRは - ファイル全体は、それがカッコの第1セットを解析し、それはそれだからあなたは1つのオブジェクトのみを取得しているつの有効なJSONオブジェクト

する必要があります。

JSONファイルを完全に制御できる場合、インデントされたレイアウトは純粋に人間が消費するためのものです。オブジェクトを平坦化し、APIを使用するようにSparkを解析させます

+1

@ataそのような複数のオブジェクトを使用する場合、最上位オブジェクトはすべてのオブジェクトをラップする配列である必要があります –

+0

{ []も働かなかった。他の解決策? – atalpha

+0

すべてのオブジェクトにキーが必要なので、 '{}'を置くだけで動作しません。同様に、 '[]'はその配列内のすべてのオブジェクトがコンマで区切られている場合にのみ機能します。言い換えれば、ファイル全体が有効なJSONオブジェクトである必要があります* –

関連する問題