🐡
Spark 4.0 でヒストグラムのplotを試してみる
Spark 4.0 で追加された DataFrame.plot
Spark 4.0がリリースされ、pysparkのデータフレームにplot()メソッドが追加された模様。
これまで自前でヒストグラムをプロットする関数を用意していたものの、ネイティブでプロットできるのであればありがたい。
ヒストグラムをプロットする関数について:
pyspark.sql.DataFrame.plot を試してみる
適当なparquetファイルからデータフレームを作成
df = spark.read.parquet("test_data.parquet")
df.show(10)
+---+--------------+----+------------------+
| ch| ts| tsg| calE|
+---+--------------+----+------------------+
| 8|27361938033230|2736| 1145.439978695|
| 11|27361938077220|2736| 759.9497774460001|
| 10|27361938135729|2736|124.77608173600001|
| 8|27361938200272|2736| 459.56505535|
| 11|27361938227936|2736| 372.92117196|
| 8|27361938261010|2736| 2146.177781105|
| 9|27361938266619|2736| 110.042555128|
| 10|27361938398923|2736| 320.893614736|
| 10|27361938430983|2736| 941.235162452|
| 8|27361938523331|2736| 574.1756668649999|
+---+--------------+----+------------------+
only showing top 10 rows
DataFrame.plot に hist, scatter, bar, line, などが用意されているので、calEカラムのデータでヒストグラムをプロットしてみる。
fig = df.select("calE").plot.hist(bins=1000)
fig.update_traces(marker_color="blue", marker_line_color="blue")
fig.show()
plotlyのFigureを返してくるのでupdate_tracesで色など見た目の変更を行う。
Plotlyだと表示の拡大や、カーソルで値を読むこともできるので便利。
今のところ2次元ヒストグラムは対応してなさそうなので、自前でやる必要がある。
二次元だと散布図はscatter()で作ることができる。
ちなみにScatterプロットなどはデフォルトだと1000行分サンプリングしてプロットするので、
データフレームの設定でspark.sql.pyspark.plotting.max_rows
を増やすともっと
プロットできる。
df._session.conf.set("spark.sql.pyspark.plotting.max_rows", 100000)
fig_scatter = df.select("calE","ch").plot.scatter("ch","calE")
fig_scatter.show()
Discussion