我正在尝试使用spark读取hive生成的序列文件。当我尝试访问该文件时,我面临org.apache.spark.SparkException:由于阶段失败而中止作业:任务不可序列化:java.io.NotSerializableException:
我已经尝试过解决这个问题的方法,比如让类可序列化,但我还是遇到了问题。我在这里写代码片段,请让我知道我在这里缺少的东西。
是否是因为BytesWritable数据类型或导致问题的其他原因。
JavaPairRDD<BytesWritable, Text> fileRDD = javaCtx.sequenceFile("hdfs://path_to_the_file", BytesWritable.class, Text.class);
List<String> result = fileRDD.map(new Function<Tuple2<BytesWritables,Text>,String>(){
public String call (Tuple2<BytesWritable,Text> row){
return row._2.toString()+"\n";
}).collect();
}
答案 0 :(得分:0)
以下是使其运作所需的内容
因为我们使用HBase来存储我们的数据,并且这个reducer将其结果输出到HBase表,Hadoop告诉我们他不知道如何序列化我们的数据。这就是为什么我们需要帮助它。在setUp里面设置io.serializations变量 你可以相应地在火花中做到这一点
conf.setStrings("io.serializations", new String[]{hbaseConf.get("io.serializations"), MutationSerialization.class.getName(), ResultSerialization.class.getName()});