json Lines形式とは
複数のjson形式のオブジェクトを1行ずつ書き込んだ(フラット化)テキストファイルのフォーマット
- json Lines形式(フラット化)
{"name": "Sato", "age": 20, "city": "New York"}
- json 形式
{
"name": "Sato",
"age": 20,
"city": "New York"
}
json Lines形式の調査をした理由
json形式のビックデータをAWS Glueデータカタログに取り込む際に、AWS Athenaでデータの読み込み時にエラーとなり、json形式からjson Lines形式へ変換しなければならない事象が発生したため、変換方法を調査した。
※Glueデータカタログについて、json形式で読み込めない場合、json Lines形式への変換を考えると良い
変換方法
- jqコマンドの場合、-cオプションを利用
$ cat test1.json | jq
{
"name": "Sato",
"age": 20,
"city": "New York"
}
$ cat test1.json | jq -c .
{"name":"Sato","age":20,"city":"New York"}
- LambdaやGlueジョブの場合、jsonライブラリのdumpsを利用
import json
data = {
"name": "Sato",
"age": 20,
"city": "New York",
}
json_lines = json.dumps(data)
print(json_lines)
# 出力結果
# {"name": "Sato", "age": 20, "city": "New York"}
json形式のデータをGlueデータカタログ上で管理するために
S3へ格納されるデータがjson形式である場合、定期的にjson Lines形式へ変換するための実装を構築することで、正常にデータを読み込むことができた。
定期的な処理はLambdaやGlueジョブ(Python Shell)を利用することで実現できるため、参考にしていただけると嬉しいです!