2017-08-01 8 views
1

私は450KのJSONを持っており、特定のルールに基づいてhdfsで名前を変更したいと思います。わかりやすくするために、私はちょうど接尾辞.finishedをそれぞれに付け加えています。 Aは、次のコードを使用して、これを行うために管理:hdfsのファイル名をより効率的に変更するにはどうすればいいですか?

import org.apache.hadoop.fs._ 

val hdfs = FileSystem.get(sc.hadoopConfiguration) 
val files = hdfs.listStatus(new Path(pathToJson)) 
val originalPath = files.map(_.getPath()) 

for(i <- originalPath.indices) 
{ 
    hdfs.rename(originalPath(i), originalPath(i).suffix(".finished")) 
} 

しかし、それはそれらのすべての名前を変更するために12分かかります。それをより速くする方法はありますか? (たぶん並列化) 私はspark 1.6.0を使用します。

答えて

1

originalpath.par.foreach(E => hdfs.rename(E、e.suffix( "仕上げ")))

+0

そして、どのようにあなたは二つの配列を持っている場合には、例えば、これを行うだろう: 'originalPath'と 'newPath'?だから私は、2つの配列のリネーム機能を適用したい。私はzipとあなたのソリューションで何かを試しましたが、うまくいきません。 – sanyi14ka

+0

私はこの場合にそれを行う方法を考え出しました、そして今は約5分しかかかりません。私は違いが 'par'関数によって作られたと思う。 – sanyi14ka

関連する問題