我有一个火花作业,它管理HDFS
上的RDD[专业记录库]
。
我的问题是它会生成很多文件,包括 95% 的空 avro 文件。我尝试使用合并来减少RDD上的分区数量,从而减少输出文件的数量,但它没有效果。
def write(data: RDD[SpecificRecordBase]) = {
data.coalesce(1, false) //has no effect
val conf = new Configuration()
val job = new org.apache.hadoop.mapreduce.Job(conf)
AvroJob.setOutputKeySchema(job, schema)
val pair = new PairRDDFunctions(rdd)
pair.saveAsNewAPIHadoopFile(
outputAvroDataPath,
classOf[AvroKey[SpecificRecordBase]],
classOf[org.apache.hadoop.io.NullWritable],
classOf[AvroKeyOutputFormat[SpecificRecordBase]],
job.getConfiguration)
}
我想rdd
分区配置和HDFS
分区之间丢失了一些东西,也许SaveAsNewAPIHadoopFile
没有考虑到它,但我不确定。
我错过了什么吗?
有人能解释一下根据rdd分区调用SaveAsNewAPIHadoopFile
时真正附加的内容吗?
感谢@0x0FFF回答了我自己的问题,正确的代码应该是:
def write(data: RDD[SpecificRecordBase]) = {
val rdd = data.map(t => (new AvroKey(t), org.apache.hadoop.io.NullWritable.get))
val rdd1Partition = rdd.coalesce(1, false) //change nb of partitions to 1
val conf = new Configuration()
val job = new org.apache.hadoop.mapreduce.Job(conf)
AvroJob.setOutputKeySchema(job, schema)
val pair = new PairRDDFunctions(rdd1Partition) //so only one file will be in output
pair.saveAsNewAPIHadoopFile(
outputAvroDataPath,
classOf[AvroKey[SpecificRecordBase]],
classOf[org.apache.hadoop.io.NullWritable],
classOf[AvroKeyOutputFormat[SpecificRecordBase]],
job.getConfiguration)
}
再次感谢!
本文向大家介绍Mysql单文件存储删除数据文件容量不会减少的bug与解决方法,包括了Mysql单文件存储删除数据文件容量不会减少的bug与解决方法的使用技巧和注意事项,需要的朋友参考一下 MySQL的Bug之一:InnoDB ibdata1 never shrinks after data is removed 问题描述 当innodb引擎使用单个文件进行存储的时候,当对数据库中数据进行删除的时候
我利用的功能如下: < li >将< code>MySQL表读入< code>DataFrame < li >改造他们 < li >合并它们 < li >写给< code>HDFS 在的整个生命周期中,没有对其执行s。它曾经像预期的那样工作,但最近我遇到了问题。由于的延迟求值,导致读取操作的并行性降低。 因此,如果我读取使用与,然后
在此处输入图像描述
MapReduce传递和发出键值对的基本信息。我需要弄清楚我们通过什么和发出什么。以下是我的关注点:MapReduce输入和输出: 1.Map() 方法 - 它是否采用单个或列表的键值对并发出什么?2.对于每个输入键值对,发出什么映射器?相同类型还是不同类型 ?3.对于每个中间键,减速器会发出什么?类型是否有任何限制?4.减速机接收所有具有相同键的值。值将如何排序,如排序或轨道排序?该顺序是否因运
问题内容: 有什么办法可以减少jar文件的大小? 我想要一个减少未使用依赖性的工具。 我使用Maven进行依赖管理。 问题答案: 从Maven的角度来看,JAR文件通常不包含依赖项。因此,您必须在谈论: WAR或EAR或类似文件, 通过合并大量JAR文件而产生的所谓的UberJAR文件;例如使用Maven阴影插件,或 依赖比Maven模块更精细。 在前两种情况下,可以通过在依赖关系规范或war或s
我正在使用一个聚合函数,我已经在我的工作中使用了很长时间了。其思想是,如果传递给函数的序列长度为1(即组只有一个观察值),则返回该观察值。如果传递的序列长度大于1,则在列表中返回观察值。 对一些人来说,这可能看起来很奇怪,但这不是一个X,Y问题,我有充分的理由想做这个与这个问题无关的事情。 这是我一直在使用的函数: 现在由于某种原因,在我正在处理的当前数据集中,我得到了一个值错误,声明函数不减少。