在spark中跨执行器比较数据

sy5wg1nm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(507)

我们有一个spark应用程序,其中数据在不同的执行者之间共享。但是我们还需要比较执行器之间的数据,其中一些数据存在于executor-1中,而一些数据存在于executor-2中。我们想知道怎样才能在spark中取得成功?
例如:有一个包含以下详细信息的文件:

Name, Date1, Date2
A, 2019-01-01, 2019-01-23
A, 2019-02-12, 2019-03-21
A, 2019-04-01, 2019-05-31
A, 2019-06-02, 2019-12-30
B, 2019-01-01, 2019-01-21
B, 2019-02-10, 2019-03-21
B, 2019-04-01, 2019-12-31

我需要通过检查第一行的date2和第二行的date1来找出这些元素之间的总间距,依此类推。。即
例如:名称a:(2019-02-12-2019-01-23)+(2019-04-01-2019-03-21)+(2019-06-02-2019-05-31)+(2019-12-31-2019-12-30)。。年份结束于2019年12月31日,因此有1天的间隔,并且间隔的数量(如果每个日期的上述公式之间的差异>0)将为4。
对于名称b:(2019-02-10-2019-01-21)+(2019-04-01-2019-03-21),间隙数为2。
一种方法是使用collectaslist(),它将所有数据检索到驱动程序,但是有没有一种不同的有效方法来直接跨执行器比较它们,如果有,我们怎么做?

mnemlml8

mnemlml81#

只需编写一个带有延迟窗口、限定符的sql查询,检查相邻行的date ad date减1,主键限定符是name。在名称中也进行排序。
您不必担心执行器,spark将根据执行器服务的分区的名称自动为您哈希。

相关问题