2017-05-02 12 views
0

での入力の同様の経路のように出力を書き込み私は、以下のディレクトリのように寄木細工のファイル内のデータを持っているApacheのスパーク

input/data/id1/files 
input/data/id2/files 
input/data/id3/files 

どのように私は、フォルダ名として、各IDでこれらのデータを読みますか。読み込みといくつかの処理を行った後、どのように入力パスと同じようなパスに出力を保存しますか?

/outout/data/id1/outputpaequet 
/outout/data/id2/outputpaequet 
/outout/data/id3/outputpaequet 

答えて

2

以下のように、ステータスはディレクトリでlsを実行するようなものです。パスのリストを取得し、それらをループし、入力を出力に置き換えて同様のパスに書き出します。

val conf = new Configuration() 
val fs = FileSystem.get(conf) 
val status = fs.listStatus(new Path("/input/data/")) 
status.foreach(f => { 
    val input = sqlContext.read.parquet(f.getPath.toString) 
    val output: DataFrame = // do something 
    output.write.parquet(f.getPath.toString.replace("input", "output")) 
}) 
+0

'val output:DataFrame = // do something'では' write'を呼び出し、元の 'input' DFではなく' write'を呼び出すといいでしょう。どのようなことをしても、実際には 'input'を変更することはできないので、今の答えは混乱するかもしれません。 –

+0

それはいい考えです。私は先に進み、それを追加しました。ありがとう! –

+0

ありがとう@DavidSchuler –

関連する問題