【发布时间】:2017-10-01 07:46:13
【问题描述】:
我有一个包含大约 6000 万个条目(将近 4.5GB)的大型序列文件。 我想拆分它。例如,我想把它分成三部分,每部分有 2000 万个条目。到目前为止我的代码是这样的:
//Read from sequence file
JavaPairRDD<IntWritable,VectorWritable> seqVectors = sc.sequenceFile(inputPath, IntWritable.class, VectorWritable.class);
JavaPairRDD<IntWritable,VectorWritable> part=seqVectors.coalesce(3);
part.saveAsHadoopFile(outputPath+File.separator+"output", IntWritable.class, VectorWritable.class, SequenceFileOutputFormat.class);
但不幸的是,每个生成的序列文件也都在 4GB 左右(总共 12GB)! 任何人都可以提出更好/有效的方法吗?
【问题讨论】:
-
你所做的就是去恕我直言。如果您希望文件具有相同大小,请使用重新分区而不是合并
-
但重新分区给出了错误--> 03 年 17 月 5 日 23:10:46 错误 executor.Executor: 阶段 0.0 (TID 1) 中任务 1.0 中的异常 com.esotericsoftware.kryo.KryoException :java.util.ConcurrentModificationException 序列化跟踪:类(sun.misc.Launcher$AppClassLoader)classLoader(org.apache.hadoop.mapred.JobConf)conf(org.apache.mahout.math.VectorWritable)----详细跟踪- --> pastebin.com/eDWvV6Fx@TalJoffe
-
我认为问题在于洗牌,因为如果我使用 coalesce(3,true) 会抛出同样的问题!
-
如果您的 RDD 中的对象不可序列化,则可能...您可以尝试使它们可序列化,或者另一种选择是将 RDD 转换为 Dataframe,然后进行重新分区
标签: java apache-spark rdd sequencefile bigdata