2017-02-27 5 views
1

Sparkを使用してHDFSに配置された非構造化ファイルの処理に関する質問がありました。スパークプロセス非構造化ファイル

このシナリオでは、1つのHDFSフォルダに多数のファイルがあります。そのため、Sparkアプリケーションはその特定のHDFSフォルダ内のすべてのファイルを読み取り、処理します。

df = spark.read.text('/user/tester/datafiles') 

:私たちは、ファイルを読み込み、データフレームの中に配置するために、次のコードを使用した場合HDFSフォルダは、ファイルの多くが含まれており、各ファイルが巨大なサイズを持っている場合は、ここに私の質問は、それはメモリの問題のうちのヒットかもしれませんさ上記のシナリオのようにHDFSファイルを処理するためのベストプラクティスまたはアプローチは何ですか?一度にすべてのファイルを読み込むのではなく、ファイルごとにループして処理する必要がありますか?

ありがとうございました。

+0

ファイルが128 MBのブロックとしてhdfsに格納されていて、2番目のものが特定のメモリで処理できる量のメモリしかフェッチしない場合は、何もする必要はないと思われます。そうでなければ、パーティション分割のオプションがあります –

答えて

0

いくつかの留意すべき点

1)spark.read.textは変換です。データの読み込みは行われません。

2)データをDataFrameに変換する操作を変換することもできます。したがって、データのロードを回避できます。

3)最後に何らかの操作を行う場合は、count()と言うことができます。

  • ジョブが作成されます。
  • このジョブは、シャッフルの境界に基づいて複数の段階に分割されます。
  • 各ステージは、パーティションに基づいてさらに複数のタスクに分割されます。
  • タスクは、利用可能なエグゼキュータコア/ノードに基づいて実行されます。

#Akashが既に述べたように、HDFSの場合、ファイルはすでにブロックに格納されています。 sparkのデフォルトのパーティション分割では、ブロックごとにrddのパーティションが作成されます。したがって、処理のためにロードされるブロックはわずかです。

+0

Akash SethiとRakeshに感謝します。 Sparkが処理部分自体でメモリを処理し、メモリ不足問題​​を起こす可能性は低いということを意味しますか?特定のスパークジョブに割り当てられたコアとメモリがあれば、例外を叩くのではなく完了に時間がかかるでしょうか? – kcyea

関連する問題