7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Microsoft Fabric] Lakehouseを中心としたエコシステム

Last updated at Posted at 2024-02-25

Lakehouseを中心としたエコシステム

Microsoft Fabricはデータに関するタスク全般をカバーするSaaS製品のため、全体像を理解すること、各手法のドキュメントにアクセスすること、いろいろ大変です。ということで‥まずはLakehouse周辺のエコシステムを図にまとめました😊

図の番号順にまとめています。参考になれば嬉しいです。

image.png

①ショートカットを構成する

Lakehouseを構成するファーストステップは、各種データソースからショートカットを構成してLakehouseからデータにアクセスできるようにすることです。

image.png

②Notebookで、TablesやFilesにあるデータをSpark Dataframeに取り込む

# CSVを読み込む
df = spark.read.format("csv").option("header","true").load("abfss_file_path")

# Dataframeを表示する
display(df)

TablesにあるデータはDelta形式のため、format("delta")とする。

df = spark.read.format("delta").load("abfss_file_path")

# Dataframeを表示する
display(df)

abfssパスはファイルやテーブルを右クリックすると、コピーできる。

image.png

format optionはcsv,parquet,jsonなどに対応。Headerをどうするかなどoptionも豊富。
以下ドキュメント参照

③Spark DataframeをLakehouseのTablesに書き込む

df.write.format("delta").mode("overwrite").saveAsTable("TableName")

書き込みモードは、appendもあります。

TablesにDelta形式で書き込まれると、テーブルアイコンに▲マークがつきます。

image.png

④Notebookで、TablesやFilesにあるデータをPandas Dataframeに取り込む

PandasのDataframeに読み込むためには若干コードが変わります。
import pandas as pdは必要です。

import pandas as pd
df = pd.read_csv("abfss_file_path")

# Dataframeを表示する
display(df)

LakehouseのFileにあるデータを右クリックして「データの読み込み → Pandas」で自動生成されるコードは以下です。(結果は同じ)

# Lakehouseをマウント
mssparkutils.fs.mount("workspace_abfss_path", "/lakehouse/{Lakehouse_Name}")

import pandas as pd
df = pd.read_csv(mssparkutils.fs.getMountPath('/lakehouse/{Lakehouse_Name}/') + "file_path")

# Dataframeを表示する
display(df)

mssparkutils のドキュメントは以下。

⑤ Pandas DataframeとSpark Dataframeを相互に変換する

PySpark → Pandas

pyspark.sql.DataFrame オブジェクトには toPandas() というメソッドがあるため、これを使えば変換できます。

pandas_df = spark_df.toPandas()

Pandas → PySpark

SparkSession オブジェクトには createDataFrame というメソッドがあるため、これを使うと pandas.DataFrame を pyspark.sql.DataFrame に変換できます。

import pandas as pd
spark_df = spark.createDataFrame(pandas_df)

⑥Lakehouseの SQL 分析エンドポイント

Lakehouseでテーブルを作成すると、SQLエンドポイントも一緒に作成されます。
ブラウザやSSMSを利用してSQLタスクをこなすことが可能です。

SQL 分析エンドポイントは、レイクハウスのデルタ テーブルに対して読み取り専用モードで動作します。 SQL 分析エンドポイントを使用してデルタ テーブルからデータの読み取りのみを行えます。 関数、ビューを保存し、SQL オブジェクト レベルのセキュリティを設定できます。

image.png

⑦Power BI Sematic Model (Import Mode)のOneLake統合

Importモードで作成されたPower BI Semantic Model (以前はデータセットと呼ばれていました)から、OneLakeにデータをエクスポートできます。ドキュメントだけだと手順がわかりにくいため、テクテク日記も参照すると〇です。

Diagram of OneLake integration for semantic models.png

⑧Direct Lake Mode

Import Mode、Direct Query Modeに加えて、第3のデータアクセス方法として、Direct Lake が利用可能になりました。Import Modeは早いけど、コピーが発生します。Direct Query Modeはリアルタイムだけど低速。Direct Lakeはコピーが発生せず、リアルタイムで、かつ高速です。

Direct Lake 用のSemantic Modelの作成方法は以下ドキュメント参照。

image.png

⑨Semantic Link

Semantic Link を使うとDatascienceを行いデータをエンリッチする際に、Power BI Semantic Model内のデータを利用できます。

具体的な手順は以下ドキュメントを参照。

image.png

A diagram that shows data flow from connectors to semantic models.png

(AI生成) PandasPySparkDataFrameの違い

  1. Pandas:

    • Pythonのオープンソースライブラリで、構造化された表形式のデータを扱うために広く使用されています
    • データ分析、機械学習、データサイエンスプロジェクトで頻繁に利用されます
    • CSV、JSON、SQLなどのフォーマットからデータをロードし、行と列を含むデータフレームを作成します
    • 分散処理をサポートしていないため、大規模なデータセットに対応する際にはリソースを追加する必要があります
    • データフレームは可変であり、遅延評価されず、統計関数はデフォルトで各列に適用されます
  2. PySpark:

    • Pandasがシングルマシンで動作するのに対して、PySparkは複数台のマシンで処理を実行します
    • 大規模なデータセットを扱う機械学習アプリケーションに適しており、100倍以上高速に処理できます
    • Apache Sparkの機能を利用してPythonで記述されたライブラリであり、分散クラスターまたはシングルノードで並列に実行できます
    • 大規模かつパワフルな分散データ処理、機械学習アプリケーションのための分析処理エンジンです

簡潔に言えば、Pandasはシングルマシンで、PySparkは複数台のマシンで動作します。大規模なデータセットを扱う場合はPySparkが最適です

まとめ

OneLakeのキャッチコピーの一つとして、One Copyがあります。様々なデータ関連のタスクをデータコピーを行うことなく実行できるというものです。が、One Copyを体現するためにはMicrosoft Fabric全体の設計と、それぞれのタスク別に考えられている機能を把握する必要があります。図をまとめることで私も理解が深まりました。

引き続き勉強頑張りましょう🤣エクスペリエンスを探索 という言葉が表示されているタブレット画面。.jpg

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?