如何将spark rdd保存到avro文件中

时间:2015-03-24 16:35:47

标签: hadoop apache-spark avro

我正在尝试将rdd保存为avro格式的文件。这就是我的代码的样子:

val output = s"/test/avro/${date.toString(dayFormat)}"
  rmr(output)//deleteing the path
  rdd.coalesce(64).saveAsNewAPIHadoopFile(
    output,
    classOf[org.apache.hadoop.io.NullWritable],
    classOf[PageViewEvent],
  classOf[AvroKeyValueOutputFormat[org.apache.hadoop.io.NullWritable,PageViewEvent]],
    spark.hadoopConfiguration)
}

当我运行此操作时,我收到错误消息:

 Unsupported input type PageViewEvent

rdd的类型是RDD [(Null,PageViewEvent)]。 有人能解释我的错误吗? 提前致谢

1 个答案:

答案 0 :(得分:2)

所以我设法找到了一个'解决方法'。

 val job = new Job(spark.hadoopConfiguration)
  AvroJob.setOutputKeySchema(job, PageViewEvent.SCHEMA$)

  val output = s"/avro/${date.toString(dayFormat)}"
  rmr(output)
  rdd.coalesce(64).map(x => (new AvroKey(x._1), x._2))
    .saveAsNewAPIHadoopFile(
    output,
    classOf[PageViewEvent],
    classOf[org.apache.hadoop.io.NullWritable],
    classOf[AvroKeyOutputFormat[PageViewEvent]],
    job.getConfiguration)

这很好用。我不再尝试使用AvroKeyValueOutputFormat了。但我想现在我能够。关键的变化是使用AvroKey并设置OutputKeySchema。