これは見逃していました。
これまでは、display
を使うか、Pandas on Sparkかpandasデータフレームに変換してプロットしていたので、この機能は嬉しいです。リリースノートにも記載されていました。
PySparkネイティブプロッティングとは
Databricks Runtime 17.0で導入されたPySpark Native Plottingは、PySparkデータフレームから直接グラフを作成できる機能です。これまでPandasへの変換やサードパーティツールが必要だった可視化作業が、PySparkの中で完結できるようになりました。この機能は、大規模データの効率的なサンプリングと集計を自動的に行い、Plotlyを使用してインタラクティブな可視化を提供します。
機能概要
PySpark Native Plottingは、PySparkデータフレームに.plot
プロパティを追加し、様々な種類のグラフを直接作成できる機能です。
主な特徴
特徴 | 説明 |
---|---|
統合されたAPI | PySparkデータフレームから直接プロット可能 |
自動最適化 | 大規模データを自動的にサンプリング・集計 |
豊富な可視化タイプ | 折れ線、棒、散布図、ヒストグラムなど多様なグラフに対応 |
インタラクティブ性 | Plotlyベースの対話的な可視化 |
パフォーマンス | SQLレベルの最適化により高速処理を実現 |
サポートされているグラフタイプ
基本的なグラフタイプ:
├── line(折れ線グラフ)
├── bar(棒グラフ)
├── barh(横棒グラフ)
├── area(面グラフ)
├── scatter(散布図)
├── pie(円グラフ)
├── box(箱ひげ図)
├── hist(ヒストグラム)
└── kde(カーネル密度推定)
データ処理フロー図
PySparkデータフレーム
↓
[自動サンプリング/集計]
↓
[SQL最適化エンジン]
↓
[Plotly可視化エンジン]
↓
インタラクティブグラフ
メリット、嬉しさ
1. ワークフローの簡素化
従来の方法(複雑):
# PySparkデータをPandasに変換してからプロット
pandas_df = spark_df.toPandas()
pandas_df.plot(kind='bar')
新しい方法(シンプル):
# PySparkデータフレームから直接プロット
spark_df.plot.bar()
2. パフォーマンスの向上
比較項目 | 従来の方法 | PySpark Native Plotting |
---|---|---|
データ転送 | 全データをドライバーに収集 | 必要な集計結果のみ転送 |
メモリ使用量 | 大規模データでOOMリスク | 効率的なサンプリング |
処理速度 | データ量に比例して遅延 | 分散処理で高速 |
3. 統一されたエクスペリエンス
開発者の利点:
├── 学習コストの削減(Pandas APIと同じインターフェース)
├── コードの一貫性向上
├── エラーの削減(型変換不要)
└── デバッグの容易さ
ウォークスルー
DBR 17.0のクラスターを使います
元のブログ記事に沿ってデータフレームを作成します。アシスタントに頼んだらコード作ってkれました。
# サンプルデータの作成
data = [
("電子機器", 20000, 5000, 25.0),
("家具", 15000, 2000, 13.33),
("オフィス用品", 12000, 3000, 25.0),
("衣類", 8000, 1000, 12.5),
("食品", 10000, 2500, 25.0),
("書籍", 6000, 1500, 25.0),
("スポーツ", 7000, 2000, 28.57),
("おもちゃ", 5000, 500, 10.0)
]
# スキーマの定義
columns = ["カテゴリー", "売上", "利益", "利益率"]
# DataFrameの作成
df = spark.createDataFrame(data, columns)
# DataFrameの表示
display(df)
散布図をプロットします。
fig = df.plot.scatter(x="売上",
y="利益",
size="利益率",
text="カテゴリー",
hover_name="カテゴリー",
color="利益率", # 利益率に基づくカラースケールを追加
color_continuous_scale="Plasma", # 視覚的に魅力的なカラースケールを使用
)
fig
棒グラフ。
# 売上高と利益を同時に表示
df.plot.bar(x="カテゴリー", y=["売上", "利益"])
折れ線グラフも。
import datetime
# サンプルのPySpark DataFrameを作成
data = [
(datetime.date(2025, 1, 1), 10),
(datetime.date(2025, 1, 2), 12),
(datetime.date(2025, 1, 3), 15),
(datetime.date(2025, 1, 4), 13),
(datetime.date(2025, 1, 5), 18)
]
df = spark.createDataFrame(data, ["date", "value"])
# .plotアクセサを使用して折れ線グラフを作成
df.plot.line(x="date", y="value", title="時系列データ")
まとめ
PySpark Native Plottingは、ビッグデータの可視化における大きな進歩です。この機能により、データエンジニアやデータサイエンティストは、データの変換や外部ツールの使用なしに、PySparkの中で完結した分析ワークフローを構築できます。
特に重要なポイントは以下の3つです:
- シンプルさ: Pandas風のAPIにより、学習コストを最小限に抑えながら強力な可視化機能を利用可能
- パフォーマンス: 分散処理とSQL最適化により、大規模データでも高速な可視化を実現
- 統合性: PySparkエコシステムとシームレスに統合され、エンドツーエンドのデータパイプラインを構築可能
今後もPySpark Native Plottingは機能拡張が予定されており、より多様な可視化ニーズに対応していくことが期待されます。ぜひDatabricks Runtime 17.0で、この革新的な機能を体験してみてください。