定義
RDDは復元力のある分散データセットです。RDDは実際には分散要素のコレクションです。リスト、配列、セット、マップコレクションと同じように。Sparkでは、データに対するすべての操作は、RDDの作成、既存のRDDの変換、および評価のためのRDD操作の呼び出しにすぎません。これらすべての背後で、SparkはRDD内のデータをクラスターに自動的に分散し、操作の実行を並列化します。
ユーザーは、2つの方法を使用してRDDを作成できます。外部データセットを読み取るか、ドライバープログラムのオブジェクトコレクション(リストやセットなど)をドライバープログラムに配布します。
RDDは読み取り専用です。一度生成されると、変更することはできません。
RDDは再計算によって取得できます。
たとえば、ReadME.mdデータファイルを読み取ります
》lines = sc.textFile("README.md")
》pythonLines = lines.filter(lambda line: "Python" in line)
SparkはこれらのRDDを遅延的にのみ計算します。つまり、アクション操作で初めて使用されたときにのみ計算されます。これの利点は、上記の例では、テキストファイルでデータを定義してから、Pythonを含む行を除外することです。lines = sc.textFile(...)を実行したときにSparkがファイル内のすべての行を読み取って保存すると、大量のストレージスペースが消費され、すぐに大量のデータが除外されます。逆に、Sparkが変換操作の完全なチェーンを理解すると、結果に本当に必要なデータしか計算できなくなります。実際、アクション操作first()では、Sparkはファイル全体を読み取るのではなく、最初に一致する行が見つかるまでファイルをスキャンするだけで済みます。デフォルトでは、SparkのRDDは、アクションを実行するたびに再計算されます。同じRDDを複数のアクションで再利用する場合は、RDD.persist()を使用してSparkにRDDをキャッシュさせることができます。
変換操作
各変換操作により、新しいRDDが生成されます。変換されたRDDは遅延評価され、これらのRDDがアクション操作で使用された場合にのみ計算されます。
変換 | 説明 | |
---|---|---|
地図 | データセットの各要素は、関数によって変換され、新しい分散データセットを形成します。 | |
フィルタ | 関数をフィルタリングし、関数がtrueを返すようにするデータセット内の要素を選択して、新しいデータセットを形成します | |
flatMap | mapに似ていますが、各入力アイテムを0個以上の出力アイテムにマップできます。 | |
mapParttions | マップに似ていますが、RDDの各パーティションで個別に実行されます | |
連合 | 元のデータセットとパラメーターを組み合わせたエクスペリエンスのデータセットを返します | |
明確な | データセットの重複排除後に新しいデータセットを返す |
説明
地図:
mapの操作を初めて見たとき、長い間理解していませんでした。その理由は、Javaのmapがk、vのキーと値のペアのセットであるためです。何が起こっているのかわかりません。これがJavaのマップと同じではないことを理解するのに長い時間がかかりました。マップ入力はRDDであり、出力もRDDであり、RDDの数は変更されません。
flatMap:
は、現在のRDDのすべてのメンバーの入力、電気泳動入力関数として関数を受け入れ、新しいRDDを返すRDD変換関数です。各入力RDDについて、flatMapはセットを返します。セット内のメンバーはExpand、oneになります。入力は複数の出力に対応できます。たとえば、「#Apache Spark」がスペースに分割されている場合、返される配列には「#」、「Apache」、「Spark」の3つのメンバーが含まれ、最後に3つのメンバーがRDDの直接メンバーになります。
N個の要素とM個のパーティションがあるとすると、map関数はN回呼び出され、mapParttionsはM回呼び出され、関数は一度に1つのパーティションを処理します。
アクション操作
データ変換後にアクション操作を実行すると、出力結果はRDDではなくなり、ドライバプログラムに戻ります。
オペレーティング | 説明 | |
---|---|---|
減らす | RDDメンバーでreduce操作を使用すると、返される結果の値は1つだけになります。 | |
収集する | RDDをドライバプログラムに読み込みます。タイプは配列です。通常、RDDは大きすぎないようにしてください。 | |
カウント | RDDメンバーの数を返します | |
最初 | RDDのメンバーを返す | |
take(n) | 最初のn人のメンバーを返す | |
saveAsTextFile(path) | RDDをテキストコンテンツに変換してパスに保存します。複数のファイルが存在する場合があります。パスは特定のパスまたはHDFSアドレスにすることができます | |
saveAsSequenceFile(path) | saveAsTextFileに似ていますが、SequenceFile形式で保存されます | |
countBykey | (k、v)タイプにのみ適用可能、キー計算の場合、return(k、int) | |
foreach(func) | コールバック関数はRDDのメンバーごとに実行され、戻り値はありません。これは、計算機を更新したり、外部ストレージシステムにデータを出力したりするためによく使用されます。ここでは、変数のスコープに注意を払う必要があります |
説明:
収集:
RDD全体のデータを取得するために使用できます。プログラムがRDDを小規模にフィルタリングし
、データをローカルで処理する場合は、それを使用できます。collect()は、データセット全体が単一のマシンのメモリに収まる場合にのみ使用できます。したがって、collect()は大規模なデータセットでは使用できません。