Не сериализуемый результат: org.apache.hadoop.io.IntWritable при чтении файла последовательности с помощью Spark / Scala - PullRequest
0 голосов
/ 10 ноября 2018

Чтение файла последовательности с 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

это нормально, поскольку IntWritable преобразуется в строку.

Если я сделаю это:

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

Основная причина не совсем ясна - сериализация, но почему так сложно? Это еще один тип аспекта сериализации, который я отмечаю. Также это отмечается только во время выполнения.

1 Ответ

0 голосов
/ 10 ноября 2018

Если цель состоит в том, чтобы просто получить целочисленное значение, вам нужно вызвать get для записи

.map{case (x, y) => (x.get()

И тогда JVM скорее обработает сериализацию целочисленного объекта чем не знать, как обрабатывать IntWritable, потому что он не реализует интерфейс Serializable

String действительно реализует Serializable

...