通常、私たちはjavaファイルへの入力として1つのテキストファイルを与えます(単純な単語カウントの問題の場合など)。その代わりに、私は与えたい100のcsvファイルを持っています(すべてのファイルを1つのファイルにマージすることはできません)。与えられた100株の最大/最小株価変動を予測しようとすると、各csvファイルは一意です。 したがって、csvファイルのフォルダ全体をjavaプログラムへの入力ストリームとして与える方法。Hadoop Dfsとmapreduceの入力として複数のファイル
0
A
答えて
4
解決策1:これを解決するために、我々はFileInputFormat.addInputPaths()メソッドを使用することができ、複数の入力のカンマ区切りのリストを取ることができ、我々は
FileInputFormat.addInputPaths(“file0,file1,....”)
または
と仮定としてそれを書くことができます2ファイルを分析する必要があり、FacebookやYouTubeのサービスを使用している人のリスト(これらのうち1つの出力ファイルが必要)
つのファイルがありますPath YoutubePath = new Path(args[0]);
Path FacebookPath = new Path(args[1]);
Path outputPath = new Path(args[2]);
MultipleInputs.addInputPath(job, FacebookPath, TextInputFormat.class, JoinFacebookMapper.class);
MultipleInputs.addInputPath(job, YoutubePath, TextInputFormat.class, YoutubeMapper.class);
FileOutputFormat.setOutputPath(job, outputPath);
コードに次の行を追加すると、1回のマップ削減ジョブで複数のファイルが渡されます。あなたは、引数ここ
0
としてフォルダ全体を渡すことができます
または
は私のテストコードは、HDFSに多くのファイルをコピーして、それらをマージすることで、それはまた、他のファイル形式をフィルタリングすることができ、私はそれをするのに役立つかもしれないと思います君は !
public class FilesMergeToHDFS {
private static FileSystem fs = null;
private static FileSystem local = null;
public static void main(String[] args) throws IOException, URISyntaxException {
// TODO Auto-generated method stub
list();
}
private static void list() throws IOException, URISyntaxException {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
URI uri = new URI("hdfs://xxx:9000");//HDFS address
fs = FileSystem.get(uri,conf);
local = FileSystem.getLocal(conf);
FileStatus[] dirsStatus = local.globStatus(new Path("E://data/73/*"), new RegexExcludePathFilter("^.*svn$"));
Path[] dirs = FileUtil.stat2Paths(dirsStatus);
FSDataInputStream in = null;
FSDataOutputStream out = null;
for(Path p:dirs){
//upload
String filename = p.getName();
FileStatus[] localStatus = local.globStatus(new Path(p+"/*"),new RegexAcceptPathFilter("^.*txt$"));
Path[] listedPaths = FileUtil.stat2Paths(localStatus);
//set outputpath
Path block = new Path("hdfs://hadoop:9000/mergehdfs/filesmerge/"+filename+".txt");
out =fs.create(block);
for(Path path:listedPaths){
in = local.open(path);
IOUtils.copyBytes(in, out, 4096, false); // copydata
in.close();
}
if (out != null) {
out.close();
}
}
}
private static class RegexAcceptPathFilter implements PathFilter {
private final String regex;
public RegexAcceptPathFilter(String regex) {
this.regex = regex;
}
@Override
public boolean accept(Path path) {
// TODO Auto-generated method stub
boolean flag = path.toString().matches(regex);
return flag;
}
}
private static class RegexExcludePathFilter implements PathFilter {
private final String regex;
public RegexExcludePathFilter (String regex) {
this.regex = regex;
}
@Override
public boolean accept(Path path) {
// TODO Auto-generated method stub
boolean flag = path.toString().matches(regex);
return !flag;
}
}
}
関連する問題
- 1. HadoopのMapReduceの複数の入力ファイル
- 2. Hadoop MapReduce - 入力ごとに1つの出力ファイル
- 3. Hadoop/MapReduceの入力としてのメモリからのオブジェクト?
- 4. 1マッパークラスの複数の入力ファイル - Hadoop
- 5. hadoop mapreduceジョブの入力用gzファイルについて
- 6. のMapReduce - 入力から複数の出力と、アレイ
- 7. 3つの入力ファイルが必要なPython MapReduce Hadoopストリーミングジョブ?
- 8. Hadoop MapReduceのキーとしてArrayWritable
- 9. webpack複数の入力ファイルと複数の出力ファイル
- 10. Hadoop入力ファイル
- 11. Hadoop - 複数の入力の使い方と削減方法
- 12. 複数のMapReduceジョブをhadoopで実行しています
- 13. Hadoop MapReduce中間出力
- 14. Hadoopジョブへの入力としてHadoop Sequentilファイルを読み取る方法は?
- 15. hadoop mapreduceで重複する
- 16. 複数のディレクトリから入力ファイルを取得するHadoopジョブ
- 17. Amazon Elastic MapReduceに複数のファイルが入力されています
- 18. Hadoop DFSパーミッションエラー
- 19. hadoop dfs -ls complains
- 20. Hadoop DFSエラー
- 21. couchdbのようなデータストアのMapReduceとHadoopのMapReduceの違いは?
- 22. Hadoop MapReduceのMapper/Reducerのセットアップとクリーンアップメソッド
- 23. Hadoop MapReduce
- 24. Amazon MapReduce入力の分割とダウンロード
- 25. MapReduceの結果を別のMapReduceに渡す方法(javaとhadoop)
- 26. Hadoop MapReduceのマップ数とタスク数を理解する
- 27. のHadoopのMapReduceエラー
- 28. のHadoopのMapReduceは、今私はのHadoopのMapReduceジョブを実行
- 29. Hadoop Streaming MapReduceファイルの検索が遅い
- 30. hadoop dfs -copyFromLocal src dest
MapReduceはすでにMapReduceのフォルダを受け入れる作るためにどのようにフォルダ –
理想的には、あなたはそのままHDFSにcsvファイルを置くだろう、そしてあなたはそれの上にハイブまたはスパークのクエリを使用して... –
を受け入れますか? /*演算子を使用していますか? – user2336157