Apache Flink DataSet API:如何将 Flink DataSet 与自身合并为新的?

Posted

技术标签:

【中文标题】Apache Flink DataSet API:如何将 Flink DataSet 与自身合并为新的?【英文标题】:Apache Flink DataSet API: How to merge a Flink DataSet with itself to a new one? 【发布时间】:2016-06-02 17:43:58 【问题描述】:

我有一个字符串类型的单维数据集:

DataSet<String> x = //['dog','cat','sheep']

我想将所有字符串与此 DataSet 中的其他字符串进行比较,以分析不同的字符串相似度算法。因此我需要一个具有以下结构的结果数据集:

DataSet<Tuple2<String,String>> y = //['dog','cat','dog','sheep','cat','sheep']

在此 DataSet 上,可以应用 flatMap 函数(或类似函数)来比较字符串。

我的问题是我不知道我必须使用哪个转换。也许转换不是处理这个问题的正确方法。

在纯 Java 中,我简单地使用两个这样的循环:

for(int i = 0; i < x.length() ; i++)
    for(int j = i+1 ; i< x.length(); j++)
        //do something with x[i] and x[j]
    

【问题讨论】:

【参考方案1】:

x.cross(x) 应该可以解决问题。这将执行默认交叉。

【讨论】:

感谢您的帮助!交叉变换有效。在我的情况下,我使用 1. x.cross(x) 和 2. 过滤器转换来过滤掉所有不必要的元组来构建严格的上三角矩阵 (A=a[i][j] 并删除 a[i][ j] for i >= j) .... 如果有更高效的方法,请告诉我。

以上是关于Apache Flink DataSet API:如何将 Flink DataSet 与自身合并为新的?的主要内容,如果未能解决你的问题,请参考以下文章

Flink DataSet API Programming Guide

FLINK 读取MYSQL数据-通过JDBC方式

flink第一个demo

Flink04: Flink核心API之DataSet

Flink:在DataStream API的批处理模式下左连接相当于Dataset API?

我可以在同一个 Flink 作业中使用 DataSet API 和 DataStream API 吗?