hadoop - 如何将 spark rdd 保存到 avro 文件

标签 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)]。 有人可以解释我做错了什么吗? 提前致谢

最佳答案

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

 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。

关于hadoop - 如何将 spark rdd 保存到 avro 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29238126/

相关文章:

java - Hadoop 2.1.0 Beta JavaC编译错误

java - Hadoop 异常。

apache-spark - Azure 数据 block : How to add Spark configuration in Databricks cluster

apache-spark - Spark结构化流水印错误

json - Apache Nifi - 从 Avro 中提取属性

google-bigquery - 将数据附加到通过 BigQuery 中的 Avro 文件创建的表

hadoop - 将文本文件放入配置单元数据库

hadoop - 多集群中 hadoop 连接的 ssh key 设置

scala - 如何按多列过滤数据框?

java - Flume:org.apache.avro.ipc.NettyServer:来自下游的意外异常。 java.nio.channels.ClosedChannelException