Java 使用浮动可写时映射程序不生成记录
我正在尝试编写一个简单的映射程序,它读取一个csv文件,并将一列作为键,另一列作为值,丢弃所有其他内容。两列都有数字数据。当我将键和值都视为文本时,映射器就会工作。但是,当我尝试将值作为float返回时,它不会返回任何行 以下是我的代码(注释代码,将值视为文本并工作):Java 使用浮动可写时映射程序不生成记录,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在尝试编写一个简单的映射程序,它读取一个csv文件,并将一列作为键,另一列作为值,丢弃所有其他内容。两列都有数字数据。当我将键和值都视为文本时,映射器就会工作。但是,当我尝试将值作为float返回时,它不会返回任何行 以下是我的代码(注释代码,将值视为文本并工作): 公共静态类筛选映射器 扩展映射器{ 私有文本keyText=新文本(); //私有文本valText=新文本(); 公共无效映射(对象键、文本值、上下文 )抛出IOException、InterruptedException{
公共静态类筛选映射器
扩展映射器{
私有文本keyText=新文本();
//私有文本valText=新文本();
公共无效映射(对象键、文本值、上下文
)抛出IOException、InterruptedException{
字符串行=value.toString();
String[]parts=line.split(“,”);
尝试
{
int pickupLocationId=Integer.parseInt(部分[0].trim());
float fare=float.parseFloat(parts[3].trim());
如果(pickupLocationId>=0&&distance>0&&fare>0)
{
字符串keyStr=Integer.toString(pickupLocationId);
keyText.set(keyStr);
//私有文本valText=新文本();
//字符串VALTR=Float.toString(票价);
//valText.set(valStr);
浮动可写f=新的浮动可写(票价);
上下文。编写(关键字文本,f);
}
}
捕获(例外e)
{
}
}
}
顺便说一下,这可能是Spark或Pig中的3行代码。。。当您实际在catch块中放置一些日志时会发生什么?您进行了哪些调试?请尝试将e.printStackTrace
放入异常块。它可能会告诉我们一些事情。
public static class FiltrationMapper
extends Mapper<Object, Text, Text, FloatWritable>{
private Text keyText = new Text();
//private Text valText = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
String line = value.toString();
String[] parts = line.split(",");
try
{
int pickupLocationId = Integer.parseInt(parts[0].trim());
float fare = Float.parseFloat(parts[3].trim());
if(pickupLocationId >= 0 && distance > 0 && fare > 0)
{
String keyStr = Integer.toString(pickupLocationId);
keyText.set(keyStr);
//private Text valText = new Text();
//String valStr = Float.toString(fare);
//valText.set(valStr);
FloatWritable f = new FloatWritable(fare);
context.write(keyText, f);
}
}
catch(Exception e)
{
}
}
}