gpt4 book ai didi

java - 如何为 KeyValueTextInputFormat 使用整数输入键

转载 作者:可可西里 更新时间:2023-11-01 16:34:11 25 4
gpt4 key购买 nike

我正在尝试读取包含以下格式行的文件。

100,1:2:3200,10:20:30

假设输入总是数字,我试图通过将输入键和值分别设置为 IntWritableText 来读取文件。但是当我运行它时,出现以下错误:

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 sourceKeyValueTextInputFormat , 它从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com