Indexing Flink中元素索引的自然方式
是否有一种内置的方法来索引和访问数据流/数据集集合的各个元素的索引 像在典型的Java集合中一样,您知道,例如,ArrayList的第三个元素可以通过Indexing Flink中元素索引的自然方式,indexing,apache-flink,flink-streaming,Indexing,Apache Flink,Flink Streaming,是否有一种内置的方法来索引和访问数据流/数据集集合的各个元素的索引 像在典型的Java集合中一样,您知道,例如,ArrayList的第三个元素可以通过ArrayList.get(2)获得,反之亦然ArrayList.indexOf(elem)为我们提供指定元素(首次出现)的索引。(我不是要从流中提取元素。) 更具体地说,当joining数据流/数据集时,是否有一种“自然的”/简单的方法来连接第一个、第二个等元素 我知道有一种转换,它将顺序索引分配给元素。我怀疑索引总是以0开头?但我也怀疑它们不一
ArrayList.get(2)
获得,反之亦然ArrayList.indexOf(elem)
为我们提供指定元素(首次出现)的索引。(我不是要从流中提取元素。)
更具体地说,当join
ing数据流/数据集时,是否有一种“自然的”/简单的方法来连接第一个、第二个等元素
我知道有一种转换,它将顺序索引分配给元素。我怀疑索引总是以0开头?但我也怀疑它们不一定是按元素创建的顺序(即按事件时间)分配的。(它也仅适用于数据集。)
这是我目前尝试的:
DataSet<Tuple2<Long, Double>> tempsJoIndexed = DataSetUtils.zipWithIndex(tempsJo);
DataSet<Tuple2<Long, Double>> predsLinJoIndexed = DataSetUtils.zipWithIndex(predsLinJo);
DataSet<Tuple3<Double, Double, Double>> joinedTempsJo = tempsJoIndexed
.join(predsLinJoIndexed).where(0).equalTo(0)...
DataSet tempsJoIndexed=DataSetUtils.zipWithIndex(tempsJo);
数据集predsLinJoIndexed=DataSetUtils.zipWithIndex(predsLinJo);
数据集joinedTempsJo=临时索引
.join(predslinjoined).where(0).equalTo(0)。。。
而且它似乎产生了错误的配对
我看到了一些可能的方法,但它们要么不灵活,要么不是很好:
元组流
s1。这种方法似乎是最可行的,但它也似乎是多余的,因为根据定义,流应该是一个连续的集合,因此,元素应该有一种有序感(例如,“我是第36个元素,因为我前面已经有35个元素了。”。我认为您必须为元素分配索引值,这样,您就可以按此索引对数据集进行分区,从而确保需要连接的两个记录由同一个子任务处理。完成后,一个简单的
groupBy(index)
和reduce()
但是,如果您希望以并行度>1的方式读取源数据,那么分配不带间隙的递增ID并不是一件小事。在这种情况下,我将创建一个RichMapFunction
,它使用runtimeContext子任务id和子任务数来计算非重叠和单调索引