Я знаю, что на этот вопрос был дан ответ много раз, но я пробовал все, и я не пришел к решению. У меня есть следующий код, который поднимает NotSerializableExceptionNotSerializableException: org.apache.hadoop.io.LongWritable
val ids : Seq[Long] = ...
ids.foreach{ id =>
sc.sequenceFile("file", classOf[LongWritable], classOf[MyWritable]).lookup(new LongWritable(id))
}
за исключением следующего
Caused by: java.io.NotSerializableException: org.apache.hadoop.io.LongWritable
Serialization stack:
...
org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:47)
at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:84)
at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:301)
При создании SparkContext, я
val sparkConfig = new SparkConf().setAppName("...").setMaster("...")
sparkConfig.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
sparkConfig.registerKryoClasses(Array(classOf[BitString[_]], classOf[MinimalBitString], classOf[org.apache.hadoop.io.LongWritable]))
sparkConfig.set("spark.kryoserializer.classesToRegister", "org.apache.hadoop.io.LongWritable,org.apache.hadoop.io.Text,org.apache.hadoop.io.LongWritable")
и глядя на вкладке окружающей среды, я могу см. эти записи. Тем не менее, я не понимаю, почему
- сериализатор Kryo, кажется, не будет использоваться (стек не упоминает Kryo)
- LongWritable не сериализации.
Я использую Apache Spark, ст. 1.5.1
Я не совсем уверен, чего вы пытаетесь достичь. – eliasah
Я пытаюсь найти определенные ключи в файле последовательности. Ключи передаются методу; для примера я просто создал их случайным образом. – navige
Почему бы вам не преобразовать его в обычный rdd, а затем искать? – eliasah