2016-08-01 7 views
0

私はdafalow ParDoでMemcacheを使いたいですか?私はappengineに属し、シリアライズできないので、既存のmemcahseライブラリを使用することはできません。 のRohitmemcacheをデータフローに使用するには?

+0

パルドのが任意のコードを実行することができます、あなたはMemcacheのアクセスのためのライブラリなど、必要なライブラリを使用することは自由です。あなたが使用しているコードの例とあなたが得ているエラーを教えてもらえますか? – jkff

+0

memcacheにアクセスするには、以下の貼り付けリンクのサーブレットに記載されているAPIを使用しようとしています。 https://cloud.google.com/appengine/docs/java/memcache/examples私はこれをParDoの内部で使用しています。それはjava.io.NotSerializableExceptionをスロー:java.io.ObjectOutputStream.writeObject0でcom.google.appengine.api.memcache.MemcacheServiceImpl \t(ObjectOutputStream.java:1184) –

答えて

4

私の推測では、あなたが(私の推測が間違っている場合は、あなたのDoFnのコードが含まれるようにあなたの質問を編集してください)タイプMemcacheServiceImplのごDoFnでプライベート変数を持っている、です。

あなたがパイプラインを提出し、労働者にそれらをデシリアライズするとき確かに、データフローは、あなたのDoFn年代をシリアル化します。これを処理する適切な方法は、変数の過渡を行い、遅延し、それを初期化することです:

class MyDoFn extends DoFn<..., ...> { 
    private transient MemcacheService memcache; 
    private MemcacheService getMemcache() { 
    if (memcache == null) { 
     memcache = MemcacheServiceFactory.getMemcacheService(); 
     ... 
    } 
    } 

    public void process(...) { 
    ...use getMemcache()... 
    } 
} 

はまた、非AppEngineの環境から、あなたがRemote APIを使用する必要があり、Memcacheの含めAppEngineのAPIにアクセスすることに注意してください。

関連する問題