管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

pysparkでFitbitの歩数JSONをパースする

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|
...

参考にしました