通常我们将一个文本文件作为 java 文件的输入(比如在简单的字数统计问题的情况下)。相反,现在我有 100 个 csv 文件,我想将其作为我的 java 代码的输入。(所有文件不能简单地合并为 1 个文件)。试图预测给定 100 只股票的最大/最小股票波动率,因此每个 csv 文件都是唯一的。 那么,如何将csv文件的整个文件夹作为输入流提供给java程序。
最佳答案
解决方案 1:为了解决这个问题,我们可以使用 FileInputFormat.addInputPaths() 方法,它可以采用逗号分隔的多个输入列表,我们可以将其写为
FileInputFormat.addInputPaths(“file0,file1,....”)
或
假设需要分析 2 个文件以及使用 Facebook 和 youtube 服务的人员列表(需要其中的一个输出文件)
我们有两个文件 facebook.txt 和 youtube.txt
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);
在代码中添加以下行将产生多个文件,以便在单个 map reduce 作业中传递。
或
您可以将整个文件夹作为参数传递
关于java - 多个文件作为 Hadoop Dfs 和 mapreduce 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46997404/