2016-10-22 5 views
0

別のインデックスを照会することに基づいて、大量のテキストファイル内のデータを処理するためにSparkを使用する必要があります。小規模の場合(RDDを配列に変換する/以下を参照)、これを行うことはできますが、大量のデータを扱うためにはそれを正しく設定することが難しいです。RDD内でsc.textFileをネストして使用

val rootPath = "..." 
val ndxRDD = sc.textFile(rootPath + "index/2016-09-01*") 

def ndxToDoc(articleName: String): String = { sc.textFile(rootPath + articleName).first(); } 

// works 
val artcilesArr = ndxRDD.collect().map(ndxToDoc); 
val articlesRDD = sc.parallelize(articlesArr) 

// does not work 
// val articlesRDD = ndxRDD.map(ndxToDoc) 

articlesRDD.count() 

私は、問題は、私はRDD内のファイルを読み込むしようとしているということであると考えている:

は、私はこれを持っています。どのようにして上記の作業を中間で行わないのですか? collect() - map -> textFile() - parallelize()を設定しますか?

ありがとうございます!

+0

ちょうど私があなたのユースケースを理解していることを確認するために、ロードしたい何十億という名前のテキストファイルがありますか?また、どのバージョンのSparkを使用していますか? –

+0

私は何十億もの他のファイル名を持つ何十億ものテキストファイル(本質的にインデックス)を持っています。私はSpark 1.6を使用していますが、必要に応じてSpark 2.0に簡単にアップグレードできます。 – Vineet

答えて

0

私はこれがこの種のタスクにとって最適なアプローチだと思います。それを望むそのユースケース!

これをリストとして収集する必要があります。そうしないと、現在のSparkの実装では不可能なRDD内にRDDを作成する必要があります。

  1. Spark-Google-Group Discussion

  2. SPARK-NestedRDD

が故に、これが最適なアプローチである、私が提案することができますが:私たちはここを見てRDD内RDDを作成できない理由の詳細については

1つは、OFFHeapメモリを使用して大きなオブジェクトをメモリに格納することです。

関連する問題