2017-07-03 5 views
1

dask.bagを使用してjsonファイルを読み取るとき、ファイル内のjsonが複数行の場合はJSONDecodeErrorになります。`dask.bag` JSONDecodeError複数行のjson配列を読み込んだ場合

ここ
import json 
import dask.bag as db 

db.read_text('single-line.json').map(json.loads).compute() 
[[{'a': 'b'}, {'c': 'd'}]]  

db.read_text('multi-line.json').map(json.loads).compute() 
JSONDecodeError: Expecting value: line 2 column 1 (char 2) 

サンプルファイルは次のようになりされています

シングルライン

[{"a": "b"}, {"c": "d"}] 

マルチライン

[ 
    {"a": "b"}, 
    {"c": "d"} 
] 

が、これはバグですか、私は何かがあります行方不明?また

私は複数行のファイルを読むことができることは注目に値する

with open('multi-line.json') as f: 
    data = f.read() 
    print(json.loads(data)) 

[{'a': 'b'}, {'c': 'd'}] 

答えて

1

ちょうど標準のlibを使用してREAD_TEXT機能は別個の要素として、ファイルのすべての行を解釈します。だから、あなたのバッグの要素は、次のようになります。これらの要素のいくつかの

['[', '{"a": "b"}', '{"c": "d"}', ']'] 

呼び出すjson.loadsは失敗します。私はあなたのデータがJSONラインで区切られていれば、より良い時間を過ごすことができると思います。このようなjsonファイルがたくさんある場合は、dask.delayedと並列化することもできます。

関連する問題