【Python】PySparkでネストされたJsonをCSVに変換する方法

 

★悩み★
・PySparkでネストされたJsonを読み込むことってできるの?
・PySparkでJson形式のファイルを読み込む方法が分からない。
・PySparkでネストされたJsonをCSVに変換する方法が分からない。



こういった「悩み」に答えます。
 

★本記事の内容★
① PySparkでネストされたJsonを読み込むことはできるか?をご紹介
② PySpark(PythonとSpark)でネストされたJsonをCSV変換するための準備
③ PySpark(PythonとSpark)でネストされたJsonをCSV変換する方法を紹介



これからご紹介する「【Python】PySparkでネストされたJsonをCSVに変換する方法」を実践したことで、筆者は1時間以内で「PythonとSparkを用いて、ネストされたJsonをCSVに変換」できました。

記事の前半では「PySpark(PythonとSpark)でネストされたJsonを読み込む方法」を解説します。記事の後半では「PySpark(PythonとSpark)でネストされたJsonをCSV変換する方法」をプログラムを例を用いて紹介します。

この記事を読み終えることで、「PySpark(PythonとSpark)でネストされたJsonをCSV変換するプログラムを作成できる」状態になります。
 

★PySparkとは★
PySpark とは、Spark を実行するための Python API です。Apache Spark とPython のコラボレーションをサポートするためにリリースされました。
参照:PySparkとは?


 

PySparkでネストされたJsonを読み込むことはできるか?


「PySparkでネストされたJsonを読み込むことはできるか?」に関して解説します。
 

データ分析などをする上で、以下のようなネストされたJsonを分析に利用することが多々あります。

 

{"col1":{"col2":"val2","col3":["arr1","arr2"]}, "col4": 1.2, "col5": {"col6": 1, "col7":2}}



結論から言いますと、PySpark(PythonとSpark)でも上記のようなネストされたJsonを扱うことができます。


もちろん、下記のようなネストされていないJsonもPySpark(PythonとSpark)で簡単に扱うことができます。

{"col1":1,"col4": 1.2}



以上が、「PySparkでネストされたJsonを読み込むことはできるか?」となります。
 

PySpark(PythonとSpark)でネストされたJsonをCSV変換するための準備


「PySpark(PythonとSpark)でネストされたJsonをCSV変換するための準備」に関してご紹介します。

★PySpark(PythonとSpark)でネストJsonをCSV変換する為の準備★
手順1:Pythonのインストール
手順2:Sparkのインストール



上記手順を実施することで、「PySpark(PythonとSpark)でネストされたJsonをCSV変換するための準備」ができます。
 

上記の各手順は、以下の日時で手順確認済みです。
手順確認済み日時:2022年4月8日



以降で、上記「PySpark(PythonとSpark)でネストJsonをCSV変換する為の準備」の各手順に関してご説明します。
 

手順1:Pythonのインストール

「手順1:Pythonのインストール」に関して解説します。
 

PySparkを使ってネストされたJsonをCSV変換するためには、Pythonのインストールが必要です。



以下の記事を参考にし、お使いのパソコンやサーバーにPythonをインストールしましょう。

>> 【ubuntu向け】pyenvでPythonをインストールする手順【簡単】

>> 【コピペOK】pyenvでPythonをインストールする手順【Linux用】

>> 【最短5分】PyAutoGUIをWindowsにインストールする手順の「手順1:Pythonのインストール」を参照

>> 【環境構築】インストーラーでMacOSにPythonをインストール



以上で、「手順1:Pythonのインストール」は完了です。
 

手順2:Sparkのインストール

「手順2:Sparkのインストール」に関して説明します。
 

PySparkを使ってネストされたJsonをCSV変換するためには、Apache Sparkのインストールが必要です。



「Apache Soarkをインストールする手順」に関しては、以下の記事をご覧ください。
 



以上で、「手順2:Sparkのインストール」は完了です。
 

上記の流れで、PySpark(PythonとSpark)でネストされたJsonをCSV変換するための準備ができました。


 

PySpark(PythonとSpark)でネストされたJsonをCSV変換する方法


「PySpark(PythonとSpark)でネストされたJsonをCSV変換する方法」に関してご紹介します。

★PySpark(PythonとSpark)でネストされたJsonをCSV変換する流れ★
手順1:PySpark(PythonとSpark)でJsonをCSV変換するプログラムを作成
手順2:作成した「PySparkでJsonをCSV変換するプログラム」の動作確認



上記手順を実施することで、「PySpark(PythonとSpark)でネストされたJsonをCSV変換」できます。
 

上記の各手順は、以下の日時で手順確認済みです。
手順確認済み日時:2022年4月8日



以降で、上記「PySpark(PythonとSpark)でネストされたJsonをCSV変換する流れ」の各手順に関してご説明します。
 

手順1:PySpark(PythonとSpark)でJsonをCSV変換するプログラムを作成

「手順1:PySpark(PythonとSpark)でJsonをCSV変換するプログラムを作成」に関して解説します。
 

PySpark(PythonとSpark)でJsonをCSV変換するプログラムを作成しましょう。



PySpark(PythonとSpark)でJsonをCSV変換するプログラムは、以下となります。

from datetime import datetime
from pyspark.sql import DataFrameReader
from pyspark.sql import SparkSession
import sys
import json

## 1. sparkの設定を作成
spark = SparkSession \
    .builder \
    .appName("Python Spark CALC FAMOUS WORDS OF SPOTS") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()
spark_context = spark.sparkContext

## 2. HDFSに格納されたJsonの読み込み
test_df = spark.read.json("spart-test/test.json")

## 3. データを表示
test_df.select("col4","col5.col6").write.option("header","true").csv("test.csv")



上記プログラムを「python-spark-json-to-csv.py」というファイル名で保存してください。
 

以上で、「手順1:PySpark(PythonとSpark)でJsonをCSV変換するプログラムを作成」は完了です。
 

手順2:作成した「PySparkでJsonをCSV変換するプログラム」の動作確認

『手順2:作成した「PySparkでJsonをCSV変換するプログラム」の動作確認』に関して解説します。
 

手順1で作成した「PySparkでJsonをCSV変換するプログラム」の動作確認をしましょう。



作成した「PySparkでJsonをCSV変換するプログラム」で利用するJsonファイルを作成するために、以下のコマンドを順に実行してください。

$ hadoop fs -mkdir spark-test
$ cat test.json
{"col1":{"col2":"val2","col3":["arr1","arr2"]}, "col4": 1.2, "col5": {"col6": 1, "col7":2}}
$ hadoop fs -put test.json spark-test/test.json
$ hadoop fs -cat spark-test/test.json
{"col1":{"col2":"val2","col3":["arr1","arr2"]}, "col4": 1.2, "col5": {"col6": 1, "col7":2}}



続いて、作成した「PySparkでJsonをCSV変換するプログラム」を実行するために、以下のコマンドを順番に実行してください。

$ export SPARK_CMD="/opt/oss/spark-2.4.5-bin-without-hadoop/bin/spark-submit"
$ ${SPARK_CMD} --master yarn --conf "spark.executor.memoryOverhead=600" \
             --num-executors 2 \
             --executor-cores 1 \
             --executor-memory 3G \
             python-spark-json-to-csv.py.py



コマンド実行後、以下のコマンドを順番に実行して、ネストされたJsonからCSV変換できたことを確認します。

$ hadoop fs -ls test.csv
Found 2 items
-rw-r--r--   1 hadoop supergroup          0 2020-09-12 23:48 test.csv/_SUCCESS
-rw-r--r--   1 hadoop supergroup         16 2020-09-12 23:48 test.csv/part-00000-fda68adb-b7ab-4fd9-b83b-1bec90fad67b-c000.csv
$ hadoop fs -cat test.csv/part-00000-fda68adb-b7ab-4fd9-b83b-1bec90fad67b-c000.csv
col4,col6
1.2,1
$



コマンド実行後、「CSV形式のデータが表示された」場合、「正常にPySparkでJsonをCSV変換できた」と判断できます。
 

以上で、『手順2:作成した「PySparkでJsonをCSV変換するプログラム」の動作確認』は完了です。
 

上記の流れで、PySpark(PythonとSpark)でネストされたJsonをCSV変換できました。


 

【まとめ】PySparkでネストされたJsonをCSVに変換する方法【Python 】


いかがでしたでしょうか?PythonとSparkを使いJsonをCSV変換する手順を解説し、以下の悩みを解決しました。
 

★悩み★
・PySparkでネストされたJsonを読み込むことってできるの?
・PySparkでJson形式のファイルを読み込む方法が分からない。
・PySparkでネストされたJsonをCSVに変換する方法が分からない。



「PythonでネストされたJsonをCSV変換することができないか?」と悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。

コメント