🐡

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