2017-06-07 9 views
3

Sparkでsc.textfileがどのように使用されているのでしょうか。私の推測では、ドライバは一度にファイルの一部を読み込み、読み込んだテキストをワーカーに配布して処理します。それとも、労働者が運転手の関与なしに、ファイルから直接テキストを読むのですか? refで述べたようにsc.textfileを使用しているときにテキストファイルを読み込むのはドライバかワーカーですか?

答えて

6

ドライバはファイルメタデータを調べます。ファイルメタデータが存在するかどうかをチェックし、ディレクトリの場合はそのファイルがディレクトリにあるかを確認し、サイズを確認します。その後、ファイル内容の実際の読み取りを行う作業者に作業を送信します。通信は本質的に「あなたがこの長さの間、このオフセットから始めてこのファイルを読んでいる」。

HDFSは大きなファイルをブロックに分割し、スパークは(通常/頻繁に)ブロックごとにタスクを分割するので、そのオフセットにスキップするプロセスは効率的になります。

他のファイルシステムは、必ずしもそうではありませんが、同様に動作する傾向があります。コーデックが分割可能でない場合、圧縮はこのプロセスを混乱させる可能性があります。

+0

それはたくさんの意味があります。情報をありがとう。 – pythonic

0

textfileは、RDDを作成します。

テキストファイルRDDSがSparkContextのテキストファイルのメソッドを使用して作成することができます。

このノートもあります:ローカルのファイルシステム上のパスを使用している場合

、ファイルも ワーカーノードで同じパスにアクセスできる必要があります。ファイルを すべてのワーカーにコピーするか、ネットワークマウントの共有ファイルシステムを使用してください。

これは、ファイルを解析してからスレーブに配信するドライバに関するあなたの推測が間違っていることを意味します。

+0

OKこれは、ドライバーの助けを借りずに、ワーカーがファイルを行単位で同期させる方法を質問します。ファイルがローカルではなくHDFSにあるとします。 – pythonic

+0

私はドライバがプロセス中で非アクティブであるとは言いませんでした。 [tag:spark]の内部メカニズムは@pythonicを定義します。 – gsamaras

+0

OK、ドライバはRDDを作成するのに役立ちますが、ファイルが巨大であると仮定しています。たとえば、1テラバイトです。そのような巨大なデータがどのように処理されるのか。それは、RDDがドライバーによってデータ全体のために普及しているというわけではありません。それは部分的に読む必要があります。私はまだ全部が混乱している。 – pythonic

関連する問題