私は GuavaCache (とscalacache wrapper ) を使用しており、いくつかのスパーク パイプラインでキャッシュ オブジェクト全体を保存して使用したいと考えています。
kryo Encoder を使用しSomeService
て、キャッシュを含むケース クラスである をエンコードします。コードを実行すると、次の例外がスローされます。
com.esotericsoftware.kryo.KryoException: java.lang.NullPointerException
Serialization trace:
localCache (com.google.common.cache.LocalCache$LocalManualCache)
underlying (scalacache.guava.GuavaCache)
cacheManager (com.myproject.LocalCacheManager)
LocalCacheManager(com.project.SomeService)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
Guava キャッシュはシリアライズ可能であるため、Kryo エンコーダーでエンコードできるはずだと考えました。LocalManualCacheクラスは Serializable も定義されています
- グアバキャッシュを直接使用したときの同じエラー
asMap
各レコードの TTL が失われるため、使用したくありません。
gauvaキャッシュオブジェクトを手動でエンコードおよびデコードできますか? それとも、カスタム キャッシュを使用できなくなるのでしょうか?