首页 \ 问答 \ 在Java上使用Map_only Hadoop选择函数(Select function with Map_only Hadoop on java)

在Java上使用Map_only Hadoop选择函数(Select function with Map_only Hadoop on java)

我想创建一个简单的函数来选择CSV文件中的非空元组。 我已经考虑过输入:CSV文件的每一行,并且如果值不为null,则该值将接收相同的元组。
我的程序如下:

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.KeyValueTextInputFormat;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.OutputFormat;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.SequenceFileInputFormat;
import org.apache.hadoop.mapred.SequenceFileOutputFormat;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;

public class Selectfunction {
    public static  class Map extends MapReduceBase implements Mapper<Text, Text, Text, Text>{

        // Map void
        public void map(Text key, Text value, OutputCollector<Text, Text> output, Reporter reporter)
                throws IOException {
            //input   
            Text cle = new Text();
            //int valeur1 = 0;
            //int valeur2 = 1;

             String[] tokens = value.toString().split(","); 
             String cle1 = tokens.toString(); 

             for (int i=0;i<tokens.length;i++) {
                // System.out.println("hana");
                if(tokens[5].toString().equals(null)){

                    value.set(value);
                }
                cle.set(cle1);
                //output.collect(word, one);
                output.collect(new Text(cle), value);
             }  

        }     

    }
    public static void main(String args[])throws Exception 
      { 
        if(args.length!=2){
            System.err.println("Usage: WeatherTemperature  <input path> <output path>");
            System.exit(-1);
        }
        // Create a new JobConf
         JobConf job = new JobConf(new Configuration(), Selectfunction.class);

         // Specify various job-specific parameters     
         job.setJobName("myjob");

         FileInputFormat.setInputPaths(job, new Path(args[0]));
         FileOutputFormat.setOutputPath(job, new Path(args[1]));
         job.setNumReduceTasks(0);
         job.setMapperClass(Selectfunction.Map.class);

        job.setInputFormat(TextInputFormat.class);
        job.setOutputFormat(TextOutputFormat.class); 
         FileInputFormat.addInputPath(job, new Path(args[0]));
         FileOutputFormat.setOutputPath(job, new Path(args[1]));
         JobClient.runJob(job);
      }
       }

我收到以下错误:

16/05/25 23:32:26 INFO mapreduce.Job: Running job: job_1448020964278_0451
16/05/25 23:32:36 INFO mapreduce.Job: Job job_1448020964278_0451 running in uber mode : false
16/05/25 23:32:36 INFO mapreduce.Job:  map 0% reduce 0%
16/05/25 23:32:44 INFO mapreduce.Job: Task Id : attempt_1448020964278_0451_m_000000_0, Status : FAILED
Error: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
        at select.Selectfunction$Map.map(Selectfunction.java:1)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

16/05/25 23:32:45 INFO mapreduce.Job: Task Id : attempt_1448020964278_0451_m_000001_0, Status : FAILED
Error: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
        at select.Selectfunction$Map.map(Selectfunction.java:1)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

I want to create simple function to select the not null tuple in CSV file. I had considered as input : each line of CSV file, and the value recieve the same tuple if it's not null.
my program is as follow:

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.KeyValueTextInputFormat;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.OutputFormat;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.SequenceFileInputFormat;
import org.apache.hadoop.mapred.SequenceFileOutputFormat;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;

public class Selectfunction {
    public static  class Map extends MapReduceBase implements Mapper<Text, Text, Text, Text>{

        // Map void
        public void map(Text key, Text value, OutputCollector<Text, Text> output, Reporter reporter)
                throws IOException {
            //input   
            Text cle = new Text();
            //int valeur1 = 0;
            //int valeur2 = 1;

             String[] tokens = value.toString().split(","); 
             String cle1 = tokens.toString(); 

             for (int i=0;i<tokens.length;i++) {
                // System.out.println("hana");
                if(tokens[5].toString().equals(null)){

                    value.set(value);
                }
                cle.set(cle1);
                //output.collect(word, one);
                output.collect(new Text(cle), value);
             }  

        }     

    }
    public static void main(String args[])throws Exception 
      { 
        if(args.length!=2){
            System.err.println("Usage: WeatherTemperature  <input path> <output path>");
            System.exit(-1);
        }
        // Create a new JobConf
         JobConf job = new JobConf(new Configuration(), Selectfunction.class);

         // Specify various job-specific parameters     
         job.setJobName("myjob");

         FileInputFormat.setInputPaths(job, new Path(args[0]));
         FileOutputFormat.setOutputPath(job, new Path(args[1]));
         job.setNumReduceTasks(0);
         job.setMapperClass(Selectfunction.Map.class);

        job.setInputFormat(TextInputFormat.class);
        job.setOutputFormat(TextOutputFormat.class); 
         FileInputFormat.addInputPath(job, new Path(args[0]));
         FileOutputFormat.setOutputPath(job, new Path(args[1]));
         JobClient.runJob(job);
      }
       }

I have received the following error:

16/05/25 23:32:26 INFO mapreduce.Job: Running job: job_1448020964278_0451
16/05/25 23:32:36 INFO mapreduce.Job: Job job_1448020964278_0451 running in uber mode : false
16/05/25 23:32:36 INFO mapreduce.Job:  map 0% reduce 0%
16/05/25 23:32:44 INFO mapreduce.Job: Task Id : attempt_1448020964278_0451_m_000000_0, Status : FAILED
Error: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
        at select.Selectfunction$Map.map(Selectfunction.java:1)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

16/05/25 23:32:45 INFO mapreduce.Job: Task Id : attempt_1448020964278_0451_m_000001_0, Status : FAILED
Error: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
        at select.Selectfunction$Map.map(Selectfunction.java:1)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

原文:https://stackoverflow.com/questions/37448288
更新时间:2022-10-22 18:10

最满意答案

你最有可能遭受内存碎片化

发生的事情是,当您释放内存块时,您会得到一些小漏洞,这些漏洞可能无法在您下次请求内存时使用。 当您继续以创建小的不可用孔的模式分配和释放时,唯一的解决方案是从系统中获得更多的内存。

如果您对程序如何将内存用于特定事物有明确定义的规则,您可能需要考虑一个内存池来帮助根据程序的特定要求分配和释放内存,而不是标准的通用要求图书馆。


You are most likely suffering from memory fragmentation.

What happens is that as you release chunks of memory, you get little holes which might not be able to be used next time you request memory. As you continue allocating and releasing in a pattern that creates small unusable holes, the only solution is to get more hunks of memory from the system.

If you have well-defined rules for how your program uses memory for specific things, you might want to consider a memory pool to help allocate and release memory according to the specific requirements of your program, rather than the general-purpose requirements of the standard library.

相关问答

更多
  • 既然你找不到直接的泄漏,你似乎需要比较内存状态的快照以查看发生了什么变化。 快速搜索表明valgrind的地块可以做快照,并且有一个python脚本来比较它们(但是如果你的程序很小,你可以手工比较) Since you can't find a straightforward leak, you seem to need to compare snapshots of memory state to see what has changed. A quick search indicates that va ...
  • 首先,您应该使用Option Strict On ,它会向您显示变量类型不匹配的位置,甚至可能会为您提供更正,例如,查看以下代码中DirectCast运算符的使用位置。 其次, HttpWebResponse有一个.Dispose()方法,所以当你完成使用时你应该调用它,或者像Zaggler指出的那样,你可以使用Using来确保非托管资源被正确清理,从而消除内存泄漏关心。 请注意,代码中可能存在其他类似问题,我们无法看到。 你不应该把事情设置为Nothing以试图摆脱它们 - 这样做与垃圾收集器混乱,并没有 ...
  • 你最有可能遭受内存碎片化 。 发生的事情是,当您释放内存块时,您会得到一些小漏洞,这些漏洞可能无法在您下次请求内存时使用。 当您继续以创建小的不可用孔的模式分配和释放时,唯一的解决方案是从系统中获得更多的内存。 如果您对程序如何将内存用于特定事物有明确定义的规则,您可能需要考虑一个内存池来帮助根据程序的特定要求分配和释放内存,而不是标准的通用要求图书馆。 You are most likely suffering from memory fragmentation. What happens is that ...
  • 对我来说,你的图表分析与rusage增加单调的事实是可疑的。 rusage状态的文档: 使用的最大驻留集大小,以千字节为单位。 也就是说,同时处理使用的物理内存的最大数量是千字节。 由于您可能在同一过程中收集统计信息,只能跨多个图像,所以rusage报告所有图像的最大内存使用情况是rusage的。 事实上,使用不同的分析工具(OS X上的仪器)会生成此图表,显示当前的内存使用情况: 这与使用proc的结果非常相似。 我会得出结论, rusage不是你想要的分析工具。 To me, the fact that ...
  • 在这段代码中: Body *body = new Body(); body->readSkel("C:\\skel2.skel"); body->drawBody(); body = new Body(); 你正在泄漏一个Body因为你没有删除第一个。 和这个: body->~Body(); delete body; 太奇怪了。 你没有显式调用这样的析构函数 - delete负责调用析构函数。 这段代码: delete[25] joints; 也很奇怪。 正确的形式是: delete [] joint ...
  • 可能发生的情况是,当你释放你的无限级别视图控制器(通过关闭/从超级视图中移除)时,仍然有一些对View / iVars / Properties的强烈引用仍然悬而未决。 尝试在释放视图控制器之前释放所有属性和实例变量。 您也可以尝试将所有IBOutlet(不会从视图中删除)定义为弱类型,以便在视图控制器被解除时释放它们。 您可以记住一些关于内存管理的清单: 任何强/保留类型的属性/变量应该由用户释放。 ARC自动执行,但有时它不能正确释放(不要问为什么)。 实例变量默认为“强”引用类型,这意味着您必须手动释 ...
  • 假设您指的是Chrome开发者工具,您可能看不到堆快照中的内存增加,因为堆快照分析器在快照之前运行垃圾收集器。 看到增加的内存使用量,特别是在活动处理期间,是很正常的。 垃圾收集器不会不必要地运行。 如果你的机器有备用的内存,它会让预留的内存增长。 如果你开始推动可用内存的限制,收集器应该运行。 你应该允许它发生这种情况。 由于您在空闲时段之后报告内存下降到其原始级别,这表示没有内存泄漏,并且垃圾收集器能够正确收集所有已分配的堆对象。 但是,IANAGE(我不是Google工程师)。 我建议阅读Heap P ...
  • 找到问题。 我复制了lazyfoo的风格并尝试在我的实现中,所以当我渲染新的textTexture时,它实际上创建了新的纹理而不会破坏它。 通过使用SDL_DestroyTexture,一切正常 在这里找到答案: https : //stackoverflow.com/questions/24938695/memory-leak-sdl-while-using-sdl-createtexturefromsurface Find the problem. I copy the style of lazyfoo ...
  • 为什么要在计时器滴答事件之外声明timespan1和timespan2? 如果在事件处理程序中创建内存,内存是否会更好 I have finally isolated the core of my memory leak, the issue was not with my DispatcherTimer but instead with my AdRotator Control. The problem has been identified on the side of the AdRotator de ...
  • 使用快照查找内存蠕变。 (见: bbum博客 ) 基本上,他们的方法是运行Instruments分配工具,获取快照,运行代码的迭代和另一个快照,重复3或4次。 这将指示在迭代期间分配但未释放的内存。 在这种情况下,请在下载之间获取快照(现在称为不同的东西)。 要弄清楚结果,请披露个人分配情况。 如果您需要查看对象使用的保留,释放和自动释放的位置,请使用仪器: 在仪器中运行,在分配中将“记录参考计数”设置为打开(您必须停止记录以设置选项)。 允许运行问题代码,停止录制,然后搜索感兴趣的对象。 之后,您需要向下 ...

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。