10

最近導入された Spark Datasets の全機能を理解するのにまだ苦労しています。

RDD を使用する場合とデータセットを使用する場合のベスト プラクティスはありますか?

Databricksは発表の中で、Datasets を使用することで、ランタイムとメモリの両方を大幅に削減できると説明しています。それでも、データセットは「既存の RDD API と連携して動作する」ように設計されていると主張されています。

これは単なる下位互換性への言及ですか、それともデータセットよりも RDD を使用することを好むシナリオはありますか?

4

2 に答える 2

15

現時点 (Spark 1.6.0)DataSetの API は単なるプレビューであり、機能の小さなサブセットのみが実装されているため、ベスト プラクティスについては何も言えません。

概念的には、Sparkは型安全性が追加されDataSetた に過ぎません (または、未来を一目見たい場合は です)。つまり、CatalystTungstenのすべての利点が得られます。これには、論理および物理計画の最適化、ベクトル化された操作、および低レベルのメモリ管理が含まれます。DataFrame DataFrameDataSet[Row]

あなたが失うのは、柔軟性と透明性です。

まず、データを で使用する前に、データをエンコードする必要がありますDataSet。Spark は、プリミティブ型と製品 / ケース クラスのエンコーダを提供しますが、現在のところ、カスタム シリアライゼーションを定義するために必要な API は利用できません。ほとんどの場合、UDT API (たとえば、Spark SQL でカスタム型のスキーマを定義する方法、spark sql データフレームの既存のクラスをシリアル化/逆シリアル化するを参照) に比較的似ておりすべての問題があります。これは比較的冗長であり、追加の作業が必要であり、複雑なオブジェクトを使用すると明らかにならない場合があります。さらに、十分に文書化されていない API の下位レベルの側面にも触れています。

透過性に関しては、典型的な RDBMS のプランナーとほぼ同じ問題です。そうでなくなるまで、それは素晴らしいことです。それは驚くべきツールであり、データを分析し、スマートな変換を行うことができますが、他のツールと同様に、間違った道をたどり、実行計画を見つめたり、物事を機能させる方法を理解しようとしたりする可能性があります.

プレビューに基づいて、DataFrameAPI と RDD API の間のどこかに配置できると思います。より柔軟ですDataFramesが、同様の最適化を提供し、一般的なデータ処理タスクに適しています。RDD API と同じ柔軟性は提供されません (少なくとも Catalyst の内部を深く掘り下げない限り)。

もう 1 つの違いは、現時点では仮説にすぎませんが、ゲスト言語 (R、Python) とのやり取りの方法です。と同様、JVMDataFrameDataSet属します。DataFrameつまり、考えられる対話は、ネイティブ JVM 操作 (式など) とゲスト側コード (Python UDF など)の 2 つのカテゴリのいずれかに属することができます。残念ながら、2 番目の部分では、JVM とゲスト環境の間の高価な往復が必要です。

以下も参照してください。

于 2016-02-16T14:51:28.313 に答える