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