pysparkでFitbitの歩数JSONをパースしました。JSONモジュールとは勝手が違ってちょっと迷いました。
歩数JSONの取得とJSONモジュールでのパース↓
確認環境
import sys print(sys.version) 3.8.6 | packaged by conda-forge | (default, Dec 26 2020, 05:05:16) [GCC 9.3.0] print(spark.version) 3.0.1
コード
pythonのJSONモジュールでの操作とずいぶん勝手が違いましたね。explodeのあたりが最初ピンと来ず戸惑いました。
from pyspark.sql import SparkSession from pyspark.sql import functions spark = SparkSession \ .builder \ .enableHiveSupport() \ .getOrCreate() df = spark.read.json('/tmp/year_2019.json') # 要素[dateTime,value]を行に分割したカラムを作成 col = functions.explode(functions.col('activities-steps')) # 元のデータ列の横にカラムを追加 df = df.withColumn('lines',col) # 元のデータ列を削除 df = df.drop("activities-steps") # dateTime,valueのデータフレームに変換 df = df.select("lines.dateTime","lines.value") # dataframeの表示 df.show()
実行結果
+----------+-----+ | dateTime|value| +----------+-----+ |2019-01-01| 6157| |2019-01-02| 5791| |2019-01-03| 6070| |2019-01-04| 7414| ...
参考にしました