4

フォルダーとファイルで構成されたデータセットがあります。フォルダー/ファイル構造自体は、データ分析にとって重要です。

データセットの構造:

folder1
   +-----file11
            +-----column1
            +-----column2

すべてのファイルには、1 つのオブジェクトを記述するデータが含まれています。ファイルの形式は一貫しています。基本的に、2 つの列を持つ csv ファイルです。2 つの列は、結果のオブジェクトで一連のタプルとして表される必要があります。

ファイルのサイズはかなり小さいです。20kbまでです。各フォルダには約 200 個のファイルが含まれています。

目的の出力オブジェクトは次のようになります。

{
    a: "folder1",              // name of parent folder
    b: "file11",               // name of content file
    c: Seq[(String, String)]   // content of file1
}

Scala でこのデータ セットの読み取りを処理するにはどうすればよいですか?

4

3 に答える 3

6

これを解決するには、次の 2 つの方法があります。

a) フォルダーからのデータが非常に小さい (数メガバイト未満) 場合は、ローカルで読み取りを行い、ExecutionEnvironment.fromCollection()メソッドを使用してデータを Flink ジョブに取り込むことができます。

b) カスタム InputFormat を作成します。InputFormat を使用すると、カスタム ファイル形式を解析できます。あなたの場合、メソッドを拡張しTextInputFormatて上書きしますreadRecord()。このメソッドは、ファイル内の各行を文字列として提供しています。次に、文字列からデータを手動で解析し、解析結果を Tuple3 のディレクトリ情報と共に返すことができます。filePath変数からパスにアクセスできます。sを使用してファイルを再帰的に読み取るFileInputFormatには、recursive.file.enumeration構成値があります。

于 2015-06-02T15:20:32.803 に答える