简体   繁体   English

Flink DataStream map Object 到对象列表

[英]Flink DataStream map Object to list of Objects

I'm trying to convert a DataStream of an object A to list of Object B. As shown in the example below, I am reading DataStream from flink consumer and I need to convert to DataStream so I can run some filters and aggregations over timeWindow on MappedMetric objects.我正在尝试将 object A 的 DataStream 转换为 Object B 的列表。如下例所示,我正在从 flink 消费者读取 DataStream,我需要转换为 DataStream,以便我可以在 timeWindow 上运行一些过滤器和聚合MappedMetric 对象。 One single LogEvent may result in list of MappedMetric object so if I use MapFunction, result would be DataStream<List>.一个 LogEvent 可能会导致 MappedMetric object 列表,因此如果我使用 MapFunction,结果将是 DataStream<List>。 However, I think that aggregation can't be run on DataStream<List>.但是,我认为聚合不能在 DataStream<List> 上运行。 Any help is highly appreciated.非常感谢任何帮助。 Thanks in advance.提前致谢。

// Input Object
public class LogEvent {
    private String id;
    private long timestamp;
    private List<LogMessage> message;
}

public class LogMessage {
    private String accountId;
    private List<Metric> metrics;
}

public class Metric {
    private String name;
    private double value;
}

// Should be transformed to 

public class MappedMetric {
    private String accountId;
    private String name;
    private double value;
    private long timestamp;
}

final DataStream<LogEvent> inputDataStream = **read from Flink consumer**
final DataStream<MappedMetric> aggregatedMetrics = inputDataStream
                .map(**SomeMapFunction**)
                .keyBy(**SomeKey**)
                
                
                

You want to use a FlatMap function, which can generate multiple results for a single input.您想使用FlatMap function,它可以为单个输入生成多个结果。 Each result is a single MappedMetric record, not a list.每个结果都是一个MappedMetric记录,而不是一个列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM