當你需要加快複製和移動業務,它們並行通常是一個不錯的選擇。您可以使用Apache引發對執行人並行化操作。你可以使用磚DBUtilsAPI,這些API調用意味著用於驅動節點,和不應該用於火花工作執行人上運行。
在本文中,我們將向您展示如何使用Apache HadoopFileUtil功能連同DBUtils並行化火花複製操作。
您可以使用這個例子作為其他文件係統操作的基礎。
請注意
複製操作的例子看起來熟悉我們使用DBUtils和Hadoop FileUtil模仿Hadoop的功能DistCp工具。
進口所需的庫
導入Hadoop函數和定義源和目標的位置。
% scala org.apache.hadoop.fs進口。_ val源= " <源dir > " val dest = <目的地dir >“dbutils.fs.mkdirs(桌子)
從司機執行人廣播信息
% scala val相依= new org.apache.spark.util.SerializableConfiguration (sc.hadoopConfiguration) val broadcastConf = sc.broadcast(參看)val broadcastDest = sc.broadcast(桌子)
複製路徑序列
% scala val filesToCopy = dbutils.fs.ls(源). map (_.path)
並行化序列和劃分工作負載
這裏我們首先得到Hadoop配置和目的地的路徑。然後我們創建對象的路徑,最後執行FileUtil.copy命令。
% scala spark.sparkContext.parallelize (filesToCopy)。foreachPartition{行= >行。foreach {file = > val conf = broadcastConf.value。價值val destPathBroadcasted = broadcastDest。值val fromPath =新路徑(文件)val toPath =新路徑(destPathBroadcasted) val fromFs = fromPath.getFileSystem(參看)val toFs = toPath.getFileSystem FileUtil(配置)。複製(fromFs fromPath、toFs toPath,假,參看)}}