Pandas は、Python でメモリ内レコードを処理するための一般的な設計としての地位を確立しており、データ操作機能の激しい変動を示しています。 そのため、レコード エンジニアまたはレコードから始める適切な人々が、自分の仕事のあるレベルでそれを検出することは驚くべきことではありません.
最新のアップデートでは、Pandas 2.0 がバックエンドとして Apache Arrow を採用しています。 このテキストでは、更新の基本的なスワップがここにある理由と、Arrow が最近リリースされた多くのフレームワークの基本的な半分にどのように変更されたか、およびレコード エンジニアリングのホットなトピックについて説明します。
Pandas とは何か、なぜ十分なのかを考える絶好の機会です。🍿 Apache Arrow
Pandas とはでは、Pandas とは何かから始めましょう。 Pandas は、メモリ内のレコードを 方向付けする ライブラリです。 機能豊富な Python API を使用します。 多くの楽器とは対照的に、Pandas は
the
です。 メモリ内のレコードをラングリングするための一般的な小さなレコードとオブジェクトを扱うための python ライブラリ.
パンダは次のように次第に正義になります:
パンダはどのように機能しますか?へ最新バージョンの新機能と改善点に署名するには、Pandas がどのように機能するかに注目しましょう.
Pandas で何かを行う前に、考えられるのは、メモリ内のレコードをロードすることです 正しい Pandas DataFrame
、一般的に機能の支出は read_csv、read_sql、read_parquet、およびその他多数。 レコードをメモリにロードするとき、おそらくメモリに保持できる方法を考えなければなりません。浮動小数点数の整数、これは一般的で簡単です。 ただし、文字列、日付、ケース、クラスなど、他の種類についてはいくつかの決定を下す必要があります。
Python は汎用性が高く、おそらく大部分は何でも意味しますが、Python records constructions (リスト、ディクショナリ、タプル、その他多数) は非常に動作が遅く、古いものではない可能性があります。 したがって、レコードの図はもはや Python ではなく、もはや一般的ではありません
、実装は Python 拡張機能の戦略によって行う必要があり、通常は C (さらに C++、Rust、およびその他) で行われます。
NumPy は pandas Marc Garcia (pandas コア開発者) によると、お気に入りのライブラリはマイルであり、DataFrame ライブラリのバックエンドとして構築された方法はなく、いくつかの貴重な境界があります。
Model 2.0のハイライトは これでバージョン 2.0 になりました。 根本的な改善点を見てみましょう: ハイライトとは何か、そしてなぜ今それらを取り上げるのか?
「欠損値」のイラスト」 (None) と expend of better make strong for records 数値の種類の外部 早いテンポ 正しく飛び込む前にコード例と、Arrow が全面的に役立つ理由、テンポがどのように改善されたかの簡単な比較を以下に示します:相互運用性の向上 バックエンドにApache Arrowを使うことで、これらはすべて終了します。 バックエンドとして NumPy (C++) から Apache Arrow にインスピレーションを与えることで (特に Pandas 1.5 と .0 のペアで Arrow を追加すると、すべてのレコードの種類が強化されます)、Arrow はより優れたストレージとテンポを提供します。 文字列レコードを実装するとすぐに、基本的なマイルストーンが変更されました2020年から始まったアローあたりの種類
NumPy と Arrow の速度比較 マーク・ガルシア.Code-Clever の変更点 矢印の種類を入れ替えると、 pyarrow 形式の拡張。 pyarrow-addition は、既存のコードへの重大な調整を確実に導くために、選択された直後に変更されました。
pandas.Sequence( , dtype='int64[pyarrow]') pandas.Sequence(['foo', 'bar', 'foobar'], dtype='string[pyarrow]')
Arrow はさらにフォームを定義しますクラスをエンコードするには:
articles=pandas.DataFrame({ ‘title’: pandas.Sequence([‘pandas 2.0 and the Arrow revolution’, ‘What I did this weekend’], dtype=’string[pyarrow]’), ‘tags’: pandas.Sequence ([[‘pandas’, ‘arrow’, ‘data’], [[‘pandas’, ‘arrow’, ‘data’]], dtype=pandas.ArrowDtype(pyarrow.list_(pyarrow.string()))), ‘日付’: pandas.Sequence([datetime.date(2023, 2, 22), datetime.date(2022, 11, 3)], dtype=’date32[pyarrow]’) }) アパッチアローとは?
なぜ Apache Arrow? )Apache Arrow は、テンポ、相互運用性、レコードの種類、特に文字列の改善に似た、最も議論されている問題を解決します。 たとえば、新しい string[pyarrow] 列の種類は、約 3.5 ケースより楽観的な環境です。
これらの有効性の良い点は、さらに大きな影響を与えます。ほとんどの Pandas DataFrames が単一のラップトップで賑わう場合に区別される、同じ量の RAM をロードする立場にある可能性のあるレコードの数。
Pandas の最大の関心事の 1 つは、レコードが交換されるとすぐに変化し、特に、ある方向から別の方向への記憶の漏えいから整然とした表形式のデータセットを刺激することです。
ここでの基本的な実現は ゼロコピー記録アクセス、複雑なテーブルをメモリにマッピングして製造し、ディスク上の 1 テラバイトのデータに 1 メガバイトと同じくらい迅速かつ簡単にアクセスできるようにします。
Arrow のエコシステムと からの標準化) Apache Arrowの概要
その他の巨大なものは、標準化されたセーブを上回っています。 Apache Arrow には実質的なエコシステムがあり、Arrow と結合する他のすべてのライブラリ間でそれを共有することもできます。 さらに、Polar に似た新しいライブラリやメソッドをモデル化するためのカスタム コネクタを追加できる場合もあります。 これらの節約に加えて、標準化されたメモリ レイアウトにより、言語間であってもアルゴリズムのライブラリを再利用できます。
アローはプログラム正直なレイアウトです。 も同様) Recordsdata Lake File Formats
ですが、接続されたファイル拡張子がなく、メモリ内に最も単純に存在するため、それほど明白ではありません。
その相互運用性により、異なる目的間でレコードを共有することが少し簡単になり、2 つの目的が共有できるため、フラッシュおよびメモリ環境の楽観的なようになります。すべてのプログラムをコピーすることなく、同一のレコード、この場合は同一のメモリ。 すべてのレコード エンジニアの夢はどれですか?
データ パイプラインに遭遇したときはいつでも、データ パイプラインからいくつかのレコードをロードします。あなたのレコードの湖、それを変換し、いくつかの分析を計算した後、エクスポートして自動的に Recordsdata アセット はおそらくエージングも行われる可能性がありますさまざまな手段、抽象化、さらにはより優れた企業のチームまでもが継続的に登場します。 持ち上げるたびに、すべてのステップでレコードの状況を維持する必要がなくなります。リフトアウトすると、多くのレコードをまっすぐに保存する必要がなくなるため、パフォーマンスとマークが大幅に向上します。
💪🏻 これは、 矢印は
the- インメモリ レコードの図の共通を開始します。
パンダを使わないように今すぐ
それで、Pandas が適切な欲求ではなくなったのはいつですか?
一般的に SQL に慣れている人Pandas の API 以外に何かを費やします。 肥大化しすぎて「落とし穴」が多すぎるのは私たちのせいです関連。
💪🏻 これは、 矢印は
- the
- インメモリ レコードの図の共通を開始します。
主な分野は、SQLでサポートするための適切な定式化をすでに簡単に知っているということですが、そのSQLを奇妙な構文にいじることはもはや基本的ではありません.たまには見に来てね
6. プリミティブは特定のレコードに対してより強力になります 7. 操作が複雑で動きが鈍い 9. 制限された、拡張不可能な種類のメタデータ 10. 魅力的な評価モデル、需要計画なし[‘pandas 2.0 and the Arrow revolution’, ‘What I did this weekend’] 11. 整然としたデータセットのための「漸進的な」制限付きマルチコア アルゴリズム
- 日々上昇し、キャッチするための多数のピックを提供します。 これらのピックを見て、なぜそれらが作成されたのか、そしてそれらがよそよそしく熟成されなければならないのかを見て署名しましょう.
豊富な Python API を提供する 1 対 1 の代替は、Rust で実行される Polars になる可能性があります。
いくつかの relate Polars の API はそれほど複雑ではなく、 エルゴノミクス、特に SQL から。 極地はフィールドの外でよりパフォーマンスが高くなりますが、捕獲や絶滅ははるかに少なくなります. これは、この章で説明されているすべての中で最も急速に上昇しています.
Polars には、おそらく製造する可能性のある要件オプティマイザーが付属しているため、超能力があります。パイプラインは、すべての操作を実行するよりも早く一緒に調べることで、より速く忙しくなります.
📝 Pandas と Polars 間で記録を共有する場合、Pandas 2.0 が行っているのは、PyArrow オブジェクトを に変更することです。 矢印2 オブジェクト (または逆の方法論ラウンド)。 内部的には、両方のライブラリが特定のレコード イラスト仕様、Apache Arrow 仕様に力を入れているため、変換するのは大変です。 大量のレコード (GB または TB) を別のレイアウトにシリアル化する必要はなくなりました。 これにより、「莫大な記録」でも問題なく共有できます。
例あるレイアウトから別のレイアウトへの「切り替え」を参照してください:
loaded_pandas_data=pandas.read_sas(fname) polars_data=polars.from_pandas(loaded_pandas_data) # pandas polars で操作を実行する to_export_pandas_data=polars .to_pandas(use_pyarrow_extension_array=Factual) to_export_pandas_data.to_latex()
ダニエル・コーストライン は言います
Polars は、Spark のよりアクセスしやすいバージョンであり、Pandas よりも簡単に署名できます。
📝 Polars と ArrowPolars の内部レコードの図は Apache Arrow であり、Pandas 2.0 ではさらに、Pandas DataFrame の際立った想像可能な内部表現の 1 つです。 完全に適切であるために、それは明示的な Rust 構造である Arrow2 です (Rust には別の Arrow 実装があり、信頼できる 矢印
)DuckDB: SQL モデルDuckDB はおそらく SQL 愛好家向けです。 確かに、それはデータベース レイアウトですが、DuckDB は、0 コピー レイヤーの方法論としても大きな魅力です。 たとえば、Recordsdata Lake 全体で S3 データの上にあるシン SQL ラッパーとして DuckDB を拡張することもできます。 DuckDB は、迅速な分析クエリを提供するという基本的な仕事を取り除きます.
DuckDB
Pandas DataFrames で直接 SQL クエリを効率的に処理できます。 SQL を使用して迅速なインターフェースを実現するために必要な場合はいつでも、DuckDB を使用してください。DuckDB はさらにDemand Arrow データセットをストレートに並べて、Arrow に沿って需要結果を循環させます。 このストリーミングにより、顧客は、DuckDB の SQL インターフェースと API の支出を Arrow レコードに要求し、さらにレコードをコピーすることなく、DuckDB の並列ベクトル化実行エンジンから利益を得ることができます。 さらに、この統合は、データセットをスキャンする際に、Arrow の述語とフィルター プッシュダウンを強力に活用します。 上の DuckDB についてのベンチマーク、サンプル プロジェクト) Recordsdata Thesaurus.
ダスクは?多くの人が来るかもしれませんDask
Pandas のパフォーマンスとスケーラビリティを支援します。 整然としたデータセットを断片に並列化し、それらを別々のスレッドまたはプロセスで処理するか、Pandas を RAM の制限から救うことで、テンポを最適化します。Oneダスクのあるフィールドは、パンダをブラックフィールドとして消費させることです。 dask.dataframe は、Pandas 固有のパフォーマンスとメモリ消費コンポーネントを解決しなくなりました。 穏やかな、それはそれらを複数のプロセスに広げます。 恐ろしい MemoryError が発生する可能性がある、整然としたデータの断片と同時に動作しないように注意することで、問題を軽減するのに役立ちます.
彼らは、より楽観的な環境のインメモリ ランタイムを使用して、想像以上に遅い Dask ジョブを作成します。
完成させるために、他の正当なピックへのいくつかのポインタを以下にリストしますそれらについての距離を詳しく説明することなく.
Koalas は、Spark の上に構築され、Databricks によって Pandas API の 70%+ を再実行し、現在
Apache Spark 3.2 以降、正式に PySpark に組み込まれました。 Spark が Pandas と同じ GitHub スターの開発価格を持っていることに注目してください。特に Spark DataFrames[‘pandas 2.0 and the Arrow revolution’, ‘What I did this weekend’] は Pandas と密接に関連しており、豊富な Python API と SQL をサポートしています。 しかし、近隣に保管されるのではなく、Spark クラスター内に保持されますVaex
は、怠惰な out-of-core DataFrames(パンダ関連)
VertiPaq は Microsoft のクローズド ソース バージョンです。 エンジンは、Excel Vitality Pivot、SQL Server Prognosis Products and companies (SSAS) Tabular、および Vitality BI を支援するインメモリ列型データベースです。 レコードをデータ モデルにロードするときはいつでも、VertiPaq エンジンの消費によって、マイルがロードされ、圧縮され、RAM に保持されます。
Recordsdata Lake Table Formats
その他の方法論このフィールドを解決するには、Recordsdata Lake テーブル レイアウトを使用します。 したがって、レコードの一部を pandas DataFrame に教えて、DuckDB が行っていることに関連付けるのが最も簡単ですが、これらの形式は、整然とした規模の分配されたデータ用です
これらには、述語フィルタリングや Z-ORDERING に似た他の利点があります。これは、Polars、DuckDB、またはその他の新しい技術をスタックに含めるよりも複雑ではありません。
結論
Pandas とは何か、Pandas が本質的に機能する方法について簡単に説明し、その重要な側面と機能を強調しました。 さらに、最初のバックエンドである NumPy の境界と、Pandas 2.0 の Arrow への切り替えがこれらの境界にどのように対処するかについても触れています。 全体として、この記事では、特にバージョン 2.0 の Pandas の利点と、Arrow、Polars、および DuckDB を中心としたエコシステムの刺激的な調整についての洞察を示します。
幸いなことに、Pandas 2.0 が古くなるとすぐにトピックのデザインを消費することはありません。Pandas、Polars、およびその他の間の変更は、窮屈なメタデータのオーバーヘッドで、ほぼ迅速に行われる可能性があります。 .
この関連性に感謝するたびに、私たちの ニュースレター、または登録
Slack は、クルーの 10,000 人以上のレコード エンジニアの半分になります
𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺