我正在使用spark处理一个非常大的数据集。数据存储为avro文件。数据也被组织在一个目录结构中(/ input/yyyy/MM/dd/HH /)。因此,例如今天的avro文件将位于/ input/2016/03/18/00至/ input/2016/03/18/23Spark创建100个空的avro文件
现在如果我处理最近2年的数据,许多avro文件被处理。
的数据处理代码如下
val inputRDD = sc.load("/input", "com.databricks.spark.avro").rdd
val outputRDD = inputRDD.map(foo).filter(_.isDefined).flatMap(x => x).join(anotherRDD).map {
case (a, (b, (c, d))) => (a, (b, c, d))
}.join(yetAnotherRDD).filter {
case (a, ((b, c, d), (e, f))) => Math.abs(a - b) <= 2000
}.map {
case (a, ((b, c, d), (e, f))) => Row(a, d)
}
val outputDF = sc.createDataframe(outputRDD, outputSchema)
outputDF.save(s"/output/${datePath(date)}", "com.databricks.spark.avro")
现在,当我内部输出去使用色相。我看到181页,每页上我都看到很多空的avro文件。
并非所有的文件都是空的......但有太多的空文件。
如果我不想要空文件,该怎么办? (不诉诸于“收集”)
我检查了,但spark 1.3.0没有colease功能。我想他们稍后将它添加到数据框中。 –
在这种情况下,您可以使用'.repartition(200)'。请注意,'.coalesce(200)'会在更高版本的Spark上执行得更好。 –