如题:
因路径下面都是二进制文件,所以得用sequenceFile()去加载输入路径。但是如果路径下面有空文件的话 会提示文件类型不对,惊奇了。
如果是普通文件,用textFile() ,路径下有空文件也是可以跑的
想问下,有没有可以过滤空文件的方法

解决方案 »

  1.   

    还是木有人。最后想了个不是办法的办法!
    就是将不是空文件的文件目录都放到一个文件中
    用spark 将这个文件读到rdd中,再将这个rdd内容(文件路径)作为另一个rdd输入路径
    然后就OK了
    ps:
    因为路径下的文件太多(10万多个,都是大文件),每次跑一点点就出错了!唉,心累!
    没办法,将目录文件再次拆分,十个文件,每个一万。
    然后,大功告成。但是感觉这样太不方便了,数据是每天都有,难道每次跑之前都要新建个目录文件么?
      

  2.   

    因为我这边是读取二进制文件,没办用textFile
      

  3.   

    每次执行前,判断下指定目录下文件的大小信息,做一次筛选,返回list 路径,spark 加载这些路径就可以了  ,就是多定义一个方法
      

  4.   

    用过自定义的pathFilter,Configuration hadoopConf = sc.hadoopConfiguration();
    hadoopConf.set("mapreduce.input.pathFilter.class","com.filter.FileFilter");
    但是有两个问题,一个是做一次筛选 就要花很久,第二个是筛选完了,同样还是有十万多个文件。用spark直接加载的话,会报错。
    java.nio.channels.ClosedChannelException