本当の最初の質問は、なぜ純粋なSQL抽象化よりもDataFrame抽象化の方が生産性が高いのかということです。
TLDR; SQLは(人間の)開発およびデバッグプロセスを対象としていませんが、DataFrameはそうです。
主な理由は、DataFrame抽象化により、冗長で判読できないネストを回避しながら、SQLステートメントを構築できるためです。ネストされたルーチンを記述し、それらをチェックアウトするためにコメントアウトし、コメントを外すパターンは、1行の変換に置き換えられます。replで(Sparkでも)行ごとに自然に物事を実行し、結果を表示できます。
テーブルに新しい変換(文字列の変形列)を追加し、それによってグループ化し、いくつかの集計を行う例を考えてみましょう。SQLはかなりいものになります。パンダはこれを解決できますが、真のビッグデータまたは特定のパーティションに関してはいくつかの点が欠けています(最近改善された可能性があります)。
DataFramesは、パンダを使用して一部のSQLプランナーにまったくレンダリングされない場合でも、SQLルーチンに対する高レベルAPIとして表示する必要があります。
-
おそらくこれについて多くの技術的な議論をすることができますが、以下のユーザーの視点を検討しています。
SQLとは異なり、Pandasのデータ操作に関してさらに多くの質問が表示される単純な理由の1つは、定義により、データベースを使用するという意味でSQLを使用することと、最近では非常に単純にデータのビットを必要とすることです1つのタスク(.csv、Web APIなどから)。これらの場合、データベースのロード、保存、操作、および抽出は実行できません。
ただし、ユースケースがPandasまたはSQLを使用することを正当化する場合を考えると、間違いではありません。多くの反復的なデータ操作タスクを実行し、出力を保持する場合は、最初にSQLを使用することをお勧めします。私が見てきた理由から、多くのユーザーがこれらの場合でもSQLを使用しない理由は2つあります。
まず、パンダがSQLより優れている主な利点は、それがより広いPythonユニバースの一部であるということです。つまり、一気にデータをロード、クリーン、操作、視覚化できることを意味します(パンダを介してSQLを実行することさえできます...)。もう1つは、非常に単純に、あまりにも多くのユーザーがSQLの機能の程度を知らないということです。すべての初心者は、データをDBから次の場所に移動する手段として、SQLの「抽出構文」(SELECT、FROM、WHEREなど)を学習します。いくつかは、より高度なグループ化と反復構文のいくつかを拾うかもしれません。しかし、その後は、専門家(DBA、データエンジニアなど)に連絡するまで、知識にかなりの大きな隔たりがある傾向があります。
tl; dr:多くの場合、ユースケース、利便性、またはSQLの機能の範囲に関する知識のギャップが原因です。