Hazelcast Jet 0.6.1-管道customTransform API的编译错误

时间:2018-06-20 11:57:39

标签: hazelcast-jet

我在使用管道KeyError: 'last_name' API时遇到了编译错误。

以下是构建管道的示例代码:

customTransform

以下是private Pipeline buildPipeline2() { Pipeline p = Pipeline.create(); p.drawFrom(Sources.<String, CacheEntry<AuditLogRecord>>remoteMapJournal("cache_AuditLog", getClientConfig(), START_FROM_OLDEST)) .addTimestamps((v) -> getTimeStamp(v), 3000) .peek() .groupingKey((v) -> Tuple2.tuple2(getUserID(v),getTranType(v))) .window(WindowDefinition.sliding(SLIDING_WINDOW_LENGTH_MILLIS, SLIDE_STEP_MILLIS)) //.aggregate(counting(),(winStart, winEnd, key, result) -> String.format("%s %5s %4d", toLocalTime(winEnd), formatKey(key), result)) .aggregate(counting()) .map((v)-> getMapKey(v)) .customTransform("test2", ()-> this) .drainTo(Sinks.map("Test")); //.drainTo(Sinks.files("c:\\data\\op.txt")); return p; } 方法的示例代码:

tryProcess()

这是编译错误。

protected boolean tryProcess(int ordinal, Object item) {
    JetEvent jetEvent = (JetEvent)item;
    Object obj = jetEvent.payload();
    tryEmit(ordinal,item);
    return true;
}

此代码可通过以下代码编译并运行良好。

incompatible types: inferred type does not conform to upper bound(s)
[ERROR] inferred: java.lang.Object
[ERROR] upper bound(s): java.util.Map.Entry

但是,使用以下代码会给出编译错误。

 .customTransform("test2", ()-> this)
 .drainTo(Sinks.files("c:\\data\\op.txt"));

请您帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

customTransform不是类型安全的。如果无法推断出type参数,它将计算为Object。但是,Sinks.map需要Map.Entry<K, V>。要解决此问题,请将类型提示添加到customTransform方法中:

    .<Map.Entry<YourKeyType, YourValueType>customTransform("test2", ()-> this)
    .drainTo(Sinks.map("Test"));

请记住,如果您的自定义处理器实际上没有返回Map.Entry,它将在运行时失败。

Sinks.files之所以有效,是因为它需要Object