Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 不可序列化结果:使用Spark/Scala读取序列文件时org.apache.hadoop.io.IntWritable_Apache Spark_Hadoop_Serialization_Sequencefile - Fatal编程技术网

Apache spark 不可序列化结果:使用Spark/Scala读取序列文件时org.apache.hadoop.io.IntWritable

Apache spark 不可序列化结果:使用Spark/Scala读取序列文件时org.apache.hadoop.io.IntWritable,apache-spark,hadoop,serialization,sequencefile,Apache Spark,Hadoop,Serialization,Sequencefile,从逻辑上读取带有Int和String的序列文件 如果我这样做: val sequence_data = sc.sequenceFile("/seq_01/seq-directory/*", classOf[IntWritable], classOf[Text]) .map{case (x, y) => (x.toString(), y.toString().split("/")(0), y.toString().split("/")(1))}

从逻辑上读取带有Int和String的序列文件

如果我这样做:

val sequence_data = sc.sequenceFile("/seq_01/seq-directory/*", classOf[IntWritable], classOf[Text])
                  .map{case (x, y) => (x.toString(), y.toString().split("/")(0), y.toString().split("/")(1))}
                  .collect
val sequence_data = sc.sequenceFile("/seq_01/seq-directory/*", classOf[IntWritable], classOf[Text])
                  .map{case (x, y) => (x, y.toString().split("/")(0), y.toString().split("/")(1))}
                  .collect 
这是正常的,因为IntWritable已转换为字符串

如果我这样做:

val sequence_data = sc.sequenceFile("/seq_01/seq-directory/*", classOf[IntWritable], classOf[Text])
                  .map{case (x, y) => (x.toString(), y.toString().split("/")(0), y.toString().split("/")(1))}
                  .collect
val sequence_data = sc.sequenceFile("/seq_01/seq-directory/*", classOf[IntWritable], classOf[Text])
                  .map{case (x, y) => (x, y.toString().split("/")(0), y.toString().split("/")(1))}
                  .collect 
然后我立即得到这个错误:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 5.0 in stage 42.0 (TID 692) had a not serializable result: org.apache.hadoop.io.IntWritable

根本原因并不十分清楚——序列化,但为什么如此困难?这是我注意到的另一种序列化方面。另外,它只在运行时才会被注意到。

如果目标是只获取一个整数值,那么您需要在可写文件上调用get

.map{case (x, y) => (x.get()
然后JVM处理而不是不知道如何处理IntWritable,因为


如果目标是只获取一个整数值,则需要在可写对象上调用get

.map{case (x, y) => (x.get()
然后JVM处理而不是不知道如何处理IntWritable,因为


嗯,字符串是Serializable的子类,IntWritable不是。因此,读取序列文件意味着所有方面都应该设置为字符串,然后从那里开始进行处理和转换?不,您可以
x.get()
,那么整数也可以序列化(并且序列化字符串的开销更小)。我在本例中使用了get()。好的,明白了!你也可以做一个回答。字符串是Serializable的子类,intwriteable不是。因此,读取序列文件意味着所有方面都应该设置为字符串,然后从那里开始进行处理和转换?不,您可以
x.get()
,那么整数也可以序列化(并且序列化字符串的开销更小)。我在本例中使用了get()。好的,明白了!你不妨回答一下