- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试读取包含以下格式行的文件。
100,1:2:3200,10:20:30
假设输入总是数字,我试图通过将输入键和值分别设置为 IntWritable
和 Text
来读取文件。但是当我运行它时,出现以下错误:
java.lang.ClassCastException: org.apache.hadoop.io.Text 无法转换为 org.apache.hadoop.io.IntWritable
现在,虽然我明白它的意思,但我无法弄清楚如何将 key 读取为整数。如果我也将 key 作为 Text
读取,则代码运行良好。如果我错过了配置,我已经检查了代码中的所有地方,但对我来说似乎没问题。
conf.set("mapred.textoutputformat.separator", "|");
conf.setInputFormatClass(KeyValueTextInputFormat.class);
conf.setOutputFormatClass(TextOutputFormat.class);
conf.setOutputKeyClass(IntWritable.class);
conf.setOutputValueClass(Text.class);
我还检查了映射器类和方法(没有缩减器)。 KeyValueTextInputFormat
是否只能将 key 读取为文本?我无法理解我做错了什么。任何帮助将不胜感激。
谢谢,
EG
最佳答案
查看the source的 KeyValueTextInputFormat
, 它从 FileInputFormat<Text, Text>
延伸.这意味着您输入的键和值都应为 Text
。 .
您可以解决实现您自己的问题 RecordReader
你可以在 KeyValueLineRecordReder
之后建模描述 here , 但从 RecordReader<IntWritable, Text>
延伸而是相应地修改代码。
当您拥有 RecordReader
时,您可以创建自己的 InputFormat
并使用你的新 RecordReader
然后在您的主要代码中,您只需要设置新的 InputFormat
像这样:
conf.setInputFormatClass(KeyValueMyInputFormat.class);
如果您真的担心性能,我推荐的另一种方法是您可以使用 SequenceFileInputFormat
.这涉及将您的输入存储为 SequenceFiles,这意味着它将直接采用二进制格式。这避免了在您的情况下需要解析每一行的开销。您可以像这样使用这种格式:
conf.setInputFormatClass(SequenceFileInputFormat.class);
关于java - 如何为 KeyValueTextInputFormat 使用整数输入键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451814/
在新的API(apache.hadoop.mapreduce.KeyValueTextInputFormat)中,如何指定除制表符(默认)之外的分隔符(定界符)来分隔键和值。 示例输入: 106298
我正在尝试读取包含以下格式行的文件。 100,1:2:3200,10:20:30 假设输入总是数字,我试图通过将输入键和值分别设置为 IntWritable 和 Text 来读取文件。但是当我运行它时
我使用 hadoop 1.0.1 做一些项目,我想让我的输入 .txt 文件成为“关键”并且我需要的“值(value)”,例如: 如果我有一个test.txt文件,文件内容是 1, 10 10 我想我
我的输入文件是这样的: Key1 : Value1,Value2 Ket2 : Value3,Value4 在映射器中,我想获得一个键,其中“:”是定界符。为此,我的代码是这样的: JobConf c
谁能给我一个我们必须使用 KeyValueTextInputFormat 和 TextInputFormat 的实际场景?? 最佳答案 TextInputFormat 类将源文件的每一行转换为键/值类
在新的 API (apache.hadoop.mapreduce.KeyValueTextInputFormat) 中,如何指定除制表符(默认)之外的分隔符(定界符)来分隔键和值。 示例输入: one
我是一名优秀的程序员,十分优秀!