注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Python の経験がある場合、ユーザーはデータを手続き的または命令的に操作することに慣れているかもしれません:データを一つの状態から別の状態へ変換するために必要な具体的な手順を提供します。それに対して、SQL は宣言的です、つまり、ユーザーが求めている結果を記述し、ソフトウェアがその結果を生成する手続きを取り扱います。PySpark は、Python を介して複雑な SQL クエリを便利に構築するためのライブラリです:これは Python の手続き的な構文で SQL のコンセプトにアクセスすることを試みます。これにより、Python の柔軟性、SQL の利便性、および Spark の並列処理能力が活用されます。
データセット全体を考え、行ではなく行に基づいてデータを処理するという概念モデルを進化させることが役立ちます。変数、リスト、辞書、ループなどを使用して直接データを操作する代わりに、ユーザーは DataFrames の観点から作業します。これは、Python の基本的な操作や演算子を使用する代わりに、分散された形でスケールに合わせて DataFrames に作用する Spark の組み込みの操作を使用することを意味します。
Python で数字のリストがあり、それぞれに 5
を加えたいと仮定します。
Copied!1 2 3 4 5 6 7
old_list = [1,2,3] # 古いリストを定義 new_list = [] # 新しいリストを定義 for i in old_list: # 古いリストの各要素について繰り返し added_number = i + 5 # 要素に5を加算 new_list.append(added_number) # 新しいリストに加算された数値を追加 print(new_list) # 新しいリストを表示 # 出力結果: [6,7,8]
PySpark では、これは次のようになります
Copied!1 2
# 新しいデータフレームを作成し、既存のデータフレームの 'number' 列に 5 を加算した結果を 'added_number' という新しい列に格納します。 new_dataframe = old_dataframe.withColumn('added_number', old_dataframe.number + 5)
new_dataframe
は以下のようになります。
number | added_number |
---|---|
1 | 6 |
2 | 7 |
3 | 8 |
興味深いことに、DataFrame
オブジェクトは実際にはメモリ内にデータを含んでいません。これは、Spark 内のデータへの参照です。DataFrames は遅延評価されます。Spark に DataFrame を使って何かを実際に行うように依頼すると(たとえば、Foundry に書き出す場合)、作成したすべての中間 DataFrame を通過し、最適化されたクエリプランを生成し、Spark クラスタで実行します。これにより、Foundry は単一のサーバーやユーザーのラップトップに収まるメモリ量を超えてスケールすることができます。