2017-08-01 51 views
1

我有450K的JSON,我想根據一定的規則在hdfs中重命名它們。爲了簡單起見,我只是給它們中的每一個添加後綴.finished。 一個託管要做到這一點,用下面的代碼:如何更有效地從火花重命名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'?所以我想爲兩個數組應用重命名函數。我嘗試了一些zip和你的解決方案,但它不起作用。 – sanyi14ka

+0

我想出了在這種情況下如何做到這一點,現在只需要大約5分鐘。我認爲不同之處在於'par'功能。 – sanyi14ka