2016-11-26 16 views
1

私は現在、4つのワーカーノードと2つのヘッドノードでスパーククラスタを設定しています。ヘッドノードの1つからアクセスできるBLOBストレージに1.5 GBのCSVファイルがあります。このデータを読み込んでPySparkを使ってキャッシュするのにはかなりの時間がかかります。データを高速に読み込む方法はありますか?blobストレージからspark経由でより速く読み込み

データを読み込み、データをk個(ノード数)の異なるセグメントに分割し、それらをパーケットファイルとしてBLOBに保存するという考えでした。このようにして、データセットの異なる部分を並列して結合して読み込むことができます...しかし、すべてのデータがヘッドノードにロードされただけではわかりません。計算が発生すると、他のマシンにデータが分配されます。後者が真であれば、パーティショニングは役に立たないでしょう。

助けていただければ幸いです。ありがとうございました。

答えて

1

一般的に、ブロブストレージのデータサイズを小さくして、ブロブストレージ間でデータを転送して並列に計算して転送速度を向上させることができます。経験則としては、64MB〜256MBのファイルサイズを持つことです。良いリファレンスはVida HaのData Storage Tips for Optimal Spark Performanceです。

ファイルを読み込んでから、それをParquet(デフォルトのスナッピーコーデック圧縮)に保存することをお勧めします。寄木張りはSparkによってネイティブに使用され、しばしば照会が高速です。唯一微妙な違いは、ファイルサイズとワーカーノードの数でパーティションを分割することです。データはワーカー・ノードにロードされますが、より多くのファイルを読み取るために多くのタスクが作成されるため、パーティション化が役立ちます。

+0

ああ、そうです。あなたの助言を得て、私の戦略はcsvファイルを取ってデータフレームに変換して、私がパーケットファイルに保存できるようにすることです。デフォルトでは、sparkはパーケットファイルを128 MBのファイルに分割します。その後、私は、ブロブからの後続のロードのためのより速いデータロードを持つことができます。これは合理的だと思いますか?ところで、迅速な対応に感謝します。 – user2253546

+1

はい、あります!あなたが気付いたようにデフォルトのパーティションを作成してから、必要に応じて調整することができます(多くの場合、デフォルトに留まります)。運と感謝のベスト! –

関連する問題