2017-07-13 5 views
2

タイムスタンプベースのフォルダ構造を読み込もうとしています。タイムスタンプを渡すと、入力パスに従ってフォルダ構造が読み込まれます。同様に、出力パスを書き込むためにタイムスタンプベースのフォルダ構造を作成する必要があります。私はロジックを構築するために助けをproceed.anyする方法がわからないこのタイムスタンプベースのフォルダ作成がスカラの火花で

def buildPaths(date_key: DateTime, sc:SparkContext): (Path,Path) = { 
    val (year, month, day,hour) = (date_key.toString("YYYY"), date_key.toString("MM"), date_key.toString("dd"),date_key.toString("HH")) 
    val inpath_tag = new Path(
    makePath("/", Some("") :: Some("/home/user/Desktop/SparK-op/") :: Some(year) :: Some(month) :: Some(day) :: Some(hour) :: Nil) 
) 

    val outpath = new Path(
    makePath("/", Some("") :: Some("/home/user/Desktop/SparK-op/") :: Some(year) :: Some(month) :: Some(day) :: Some(hour) :: Nil) 
) 
    //queryHDFS(sc, inpath_tag); 
    //queryHDFS(sc, inpath_sens); 
    (inpath_tag, outpath) 
    } 
    def makePath(char:String, components: List[Option[String]]) = components.flatten mkString char; 

    } 
    } 

ようにしようとした

This is my input path 
/Desktop/user/outFiles6/test1/2017/06/09/15 

Similarly my output path should be created. 

いただければ幸いです。

+0

あなたの問題は何ですか?パスはどこから来たのですか?例えば。 'java.nio.file.Path'の場合は' new'で作成することはできず、 'Paths.get'を使うべきです。 –

+0

そのhadoopパス... – Rakshita

答えて

0

ライブラリFileをインポートする必要があります。基本的には、ディレクトリを作成し、ディレクトリがすでに存在するかどうかを確認する必要があります。以下は、ディレクトリを再帰的に作成するためのコードです。

import java.io.File 

def makePath(char:String, components: List[Option[String]]) = { 
    var path = "" 
    var pathstring = components.flatten mkString char 
    var pathArray = pathstring.split("/") 
    for (directory <- pathArray) { 
     if(directory != ""){ 
      path += directory 
      //Check if path present else create 
      var file = new File(path) 
      if(!file.exists){ 
       file.mkdir 
       path += "/" // separator for creating next directory 
      } 
     } 
    } 
} 

希望に役立ちます!

0

あなたはSpark SQLのデータセット/データフレームを使用し、正確に出力フォルダ構造の正確さに厳密に拘束されていないと仮定します。もしそうなら、あなたは、単にその

df.write.partitionBy("year", "month", "day").format("parquet").save(outPath) 

のようなパーティショニングを行うための標準スパーク/ハイブの方法を使用することができ前年比はOUTPATH /年= 2017 /月= 12 /日= 10下のファイルで、あなたの出力ファイルを持っています。

関連する問題