2016-09-12 9 views
5

S3バケットにjsonファイルがたくさんあり、それらを読み込んでそれらのファイルを検索できるようにしたい。問題はそれらがきれいに印刷されていることです。 1つのjsonファイルには大量の辞書が1つしかありませんが、1行にはありません。 thisスレッドごとに、jsonファイル内の辞書はApache Sparkの制限である1行に入れる必要があります。私はそのように構造化されていません。Apache Sparkでかなりプリントされたjsonファイルを読む

  1. は、私は、Apacheスパーク(1行に1つの辞書内で必要なスキーマと一致するように、これらのファイルを変換避けることができます - ここで

    { 
        "dataset": [ 
         { 
          "key1": [ 
           { 
            "range": "range1", 
            "value": 0.0 
           }, 
           { 
            "range": "range2", 
            "value": 0.23 
           } 
          ] 
         }, {..}, {..} 
        ], 
        "last_refreshed_time": "2016/09/08 15:05:31" 
    } 
    

    が私の質問です -

    私のJSONスキーマは次のようになりますファイル)を読み込み、それでも読み込めますか?

  2. もしそうでなければ、Pythonでそれを行う最良の方法は何ですか?バケツには毎日これらのファイルがたくさんあります。バケットは1日ごとに分割されます。

  3. Apache Spark以外のファイルを照会するのに適したツールはありますか?私はAWSスタック上にあるので、Zeppelinノートブックで他の提案されたツールを試すことができます。

+0

プリティ印刷せずに出て戻ってそれを書い含む(私はスパークに慣れていないんだけど、あなたはPythonが利用可能な場合には、単に 'json'モジュールを使用してJSONファイルを読み込み、その後、あなたがやりたいことができます)。 – larsks

答えて

0

あなたはここにsc.wholeTextFiles()を使用することができ、関連postです。

また、単純な関数を使用してjsonを再フォーマットし、生成されたファイルをロードすることもできます。

def reformat_json(input_path, output_path): 
    with open(input_path, 'r') as handle: 
     jarr = json.load(handle) 

    f = open(output_path, 'w') 
    for entry in jarr: 
     f.write(json.dumps(entry)+"\n") 
    f.close() 
関連する問題