要有效利用Hadoop中的map-reduce作業,我需要將數據存儲在hadoop's sequence file format中。然而,目前的數據只是平坦的.txt格式。任何人都可以提出一種方法,我可以將.txt文件轉換爲序列文件?如何將.txt文件轉換爲Hadoop的序列文件格式
回答
所以最簡單的答案只是一個具有SequenceFile輸出的「身份」作業。
看起來這在java中:
public static void main(String[] args) throws IOException,
InterruptedException, ClassNotFoundException {
Configuration conf = new Configuration();
Job job = new Job(conf);
job.setJobName("Convert Text");
job.setJarByClass(Mapper.class);
job.setMapperClass(Mapper.class);
job.setReducerClass(Reducer.class);
// increase if you need sorting or a special number of files
job.setNumReduceTasks(0);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job, new Path("/lol"));
SequenceFileOutputFormat.setOutputPath(job, new Path("/lolz"));
// submit and wait for completion
job.waitForCompletion(true);
}
這取決於TXT文件的格式是什麼。每記錄一行嗎?如果是這樣,你可以簡單地使用TextInputFormat,它爲每一行創建一條記錄。在您的映射器中,您可以解析該行並根據您的選擇使用它。
如果它不是每條記錄一行,則可能需要編寫自己的InputFormat實現。看看this tutorial瞭解更多信息。
如果你的數據是不是在HDFS,你需要把它上傳到HDFS。兩個選項:
i)hdfs -put在你的.txt文件上,一旦你在HDFS上得到它,你可以將它轉換爲seq文件。 ii)在HDFS客戶端框中輸入文本文件作爲輸入,並通過創建SequenceFile.Writer並向其添加(鍵值)來使用序列文件API將其轉換爲SeqFile。
如果你不關心鍵,U可以使行號碼作爲關鍵和完整的文本價值。
我需要使用第一個選項。 我該怎麼做? – zohar 2012-01-23 15:00:11
你也可以創建一箇中間表,LOAD DATA的CSV內容直入,然後創建第二個表作爲sequencefile(分區,集羣,等..),並從中間表中插入選擇。您還可以設置壓縮,例如選項,然後
set hive.exec.compress.output = true;
set io.seqfile.compression.type = BLOCK;
set mapred.output.compression.codec = org.apache.hadoop.io.compress.SnappyCodec;
create table... stored as sequencefile;
insert overwrite table ... select * from ...;
的MR框架會照顧heavylifting的你,因此您不必編寫Java代碼的麻煩。
import java.io.IOException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
//White, Tom (2012-05-10). Hadoop: The Definitive Guide (Kindle Locations 5375-5384). OReilly Media - A. Kindle Edition.
public class SequenceFileWriteDemo {
private static final String[] DATA = { "One, two, buckle my shoe", "Three, four, shut the door", "Five, six, pick up sticks", "Seven, eight, lay them straight", "Nine, ten, a big fat hen" };
public static void main(String[] args) throws IOException {
String uri = args[ 0];
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
Path path = new Path(uri);
IntWritable key = new IntWritable();
Text value = new Text();
SequenceFile.Writer writer = null;
try {
writer = SequenceFile.createWriter(fs, conf, path, key.getClass(), value.getClass());
for (int i = 0; i < 100; i ++) {
key.set(100 - i);
value.set(DATA[ i % DATA.length]);
System.out.printf("[% s]\t% s\t% s\n", writer.getLength(), key, value);
writer.append(key, value); }
} finally
{ IOUtils.closeStream(writer);
}
}
}
不錯的簡單例子! – user249654 2013-05-23 06:32:02
uri在這裏是什麼? – 2014-02-07 04:41:07
,如果你已經安裝了Mahout的 - 它叫做:seqdirectory - 它可以做它
- 1. 如何將.arff格式的文件轉換爲.txt文件格式?
- 2. 將Parquet文件格式轉換爲序列文件格式
- 3. 如何將txt文件轉換爲xml?
- 4. 如何將兩列的文本文件轉換爲fasta格式
- 5. 將文本文件轉換爲Spark Java中的序列格式
- 6. 如何將CSV文件轉換爲R中的.txt文件
- 7. 如何將.txt文件轉換爲matlab中的.csv文件?
- 8. 使用Ruby將格式化的TXT文件轉換爲JSON?
- 9. 將Pandas DataFrame轉換爲LIBFM格式的txt文件
- 10. 將純文本文件轉換爲Spark中的Hadoop序列文件
- 11. 將.doc和.txt格式的文件轉換爲.aspnet的pdf文件?
- 12. 如何將txt文件轉換爲FoxPro frx文件
- 13. 如何使用python將.txt文件轉換爲xml文件?
- 14. 如何將.txt文件轉換爲Python中的列表?
- 15. 如何將點雲.pts文件轉換爲.pcd文件格式?
- 16. 如何將.npz格式轉換爲.py格式的.csv文件?
- 17. 轉換爲.txt文件
- 18. 如何將java序列化文件轉換爲json文件
- 19. BufferedReader從txt文件轉換爲陣列
- 20. 如何將txt文件中的數字轉換爲座標格式?
- 21. 將.txt文件轉換爲SQLite
- 22. 將* .mis,* fin轉換爲* txt文件
- 23. 將.kml轉換爲.txt文件
- 24. 將多個.dta文件轉換爲.txt
- 25. 將txt文件導入excel並將文本格式化爲列
- 26. 如何將Javascript中的轉義字符轉換爲.txt文件?
- 27. 將.msg文件轉換爲.xps格式?
- 28. 將PowerPoint文件轉換爲ODP格式?
- 29. 將.log文件轉換爲CSV格式
- 30. 將文本文件的格式轉換爲其他格式
所以,如果我有100個.txt文件這會給我100個.SEQ文件,對不對?如果我想要一個大的.seq文件怎麼辦? – dranxo 2012-08-03 23:00:35
我猜測:job.setNumReduceTasks(1); – dranxo 2012-08-03 23:07:15
@rcompton是完全相同 – 2012-08-04 08:16:01