0
我想在dafalow ParDo中使用Memcache?任何想法如何?我不能使用現有的memcahse lib,因爲它們屬於appengine並且不可序列化。 羅希特如何在數據流中使用memcache?
我想在dafalow ParDo中使用Memcache?任何想法如何?我不能使用現有的memcahse lib,因爲它們屬於appengine並且不可序列化。 羅希特如何在數據流中使用memcache?
我的猜測是,你有一個私有變量您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。
ParDo's可以執行任意代碼,您可以自由使用任何您想要的庫,包括用於Memcache訪問的庫。你能舉一個你正在使用的代碼的例子和你得到的錯誤嗎? – jkff
我正嘗試使用下面粘貼鏈接中的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) –