gpt4 book ai didi

scala - 读取多个AVRO文件时对象无法序列化错误

转载 作者:行者123 更新时间:2023-12-02 20:25:39 34 4
gpt4 key购买 nike

我正在尝试将HDFS目录中的小型Avro文件合并到单个文件中。有人可以指导我如何使用scala-spark合并它们。提前致谢。

下面显示的代码使用newAPIHadoopFile方法创建一个RDD。

val src = "/hdfs/path/to/folder"
val rdd = sc.newAPIHadoopFile(src, classOf[AvroKeyInputFormat[GenericRecord]], classOf[AvroKey[GenericRecord]], classOf[NullWritable], sc.hadoopConfiguration)

它给了我以下错误,告诉我我做错了什么:
scala> rdd.take(1).foreach(println)
19/07/16 07:28:59 WARN AvroKeyInputFormat: Reader schema was not set. Use AvroJob.setInputKeySchema() if desired.
19/07/16 07:28:59 ERROR Executor: Exception in task 0.0 in stage 2.0 (TID 2)
java.io.NotSerializableException: org.apache.avro.mapred.AvroKey
Serialization stack:
- object not serializable (class: org.apache.avro.mapred.AvroKey, value: {someValue})
- field (class: scala.Tuple2, name: _1, type: class java.lang.Object)
- object (class scala.Tuple2, (someValue,(null)))
- element of array (index: 0)
- array (class [Lscala.Tuple2;, size 1)

最佳答案

如果您不担心rdd,更简单的方法是使用Spark Dataframe.Spark 2+代码看起来像这样

val spark = SparkSession.builder().getOrCreate()
val inputAvro = spark.read.format("com.databricks.spark.avro").load("/hdfs/path/to/folder")
inputAvro.coalesce(partitionNumber).write.format("com.databricks.spark.avro").save("<outputPath>")

这里 partitionNumber是您想要将avro写入其中的文件数

在运行此代码时,您必须包括 --packages com.databricks:spark-avro_2.11:4.0.0,以确保它能够读取avro阅读器

关于scala - 读取多个AVRO文件时对象无法序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57056534/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com