当我尝试使用带有这样的过滤器的数据存储区查询时:
Query billQuery = new Query("Bill");
billQuery.setFilter(new Query.FilterPredicate("payedOn", Query.FilterOperator.GREATER_THAN, new Date()));
并尝试运行:
new MapReduceSpecification.Builder, List>>>(new DatastoreInput(billQuery, mapShardCount),
new SimpleCounter("BillID"), new CountReducer(), new InMemoryOutput>())
.setKeyMarshaller(Marshallers.getStringMarshaller())
.setValueMarshaller(Marshallers.getLongMarshaller())
.setJobName("MapReduceTest count")
.setNumReducers(reduceShardCount)
.build();
我得到了这个例外:
java.lang.IllegalArgumentException: payedOn: com.google.appengine.api.datastore.Entity is not a supported property type.
其中'paidOn'是数据存储区实体中具有Date值的属性。
这个例子与[例子]非常相似:
所以我猜我做错了,但我不知道,这是一个标准的数据存储区查询。 有什么建议?
答案 0 :(得分:2)
这是此行中的错误:https://github.com/GoogleCloudPlatform/appengine-mapreduce/blob/master/java/src/main/java/com/google/appengine/tools/mapreduce/inputs/DatastoreShardStrategy.java#L386 在修复之前,你可以通过提供两个边界(上部和下部)来避免这个问题,或者通过用item.get(0)替换item.get(0)来自己修补它.getProperty(propertyName)