2016-08-01 28 views
0

我想在dafalow ParDo中使用Memcache?任何想法如何?我不能使用現有的memcahse lib,因爲它們屬於appengine並且不可序列化。 羅希特如何在數據流中使用memcache?

+0

ParDo's可以執行任意代碼,您可以自由使用任何您想要的庫,包括用於Memcache訪問的庫。你能舉一個你正在使用的代碼的例子和你得到的錯誤嗎? – jkff

+0

我正嘗試使用下面粘貼鏈接中的servlet中列出的API來訪問memcache。 https://cloud.google.com/appengine/docs/java/memcache/examples。我在ParDo內使用這個。它會拋出java.io.NotSerializableException:com.google.appengine.api.memcache.MemcacheServiceImpl \t at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) –

回答

4

我的猜測是,你有一個私有變量您MemcacheServiceImpl類型(如果我的猜測是錯誤的,請編輯您的問題,包括你的DoFn的代碼)DoFn

實際上,Dataflow在您提交管道並在工作人員上對其進行反序列化時會序列化您的DoFn。處理這種情況的正確方法是把這些變量短暫的,懶洋洋地初始化:

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

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

另外請注意,訪問應用服務引擎API,包括內存緩存,從非AppEngine上的環境中,你應該使用Remote API

相關問題