我们有一个spark应用程序,在这个应用程序中,数据在不同的执行者之间共享。但是我们也需要比较执行者之间的数据,其中某些数据在executor-1中,而有些数据在executor-2中。我们想知道如何才能在火花中实现?
例如:拥有一个包含以下详细信息的文件:
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-01)+ (2019-04-01 - 2019-03-21) + (2019-06-02 -2019-2019-05-31)+ (2019-12-31 -2019-2019-12-30)。年份将于2019年至12-31年结束,因此有1天的缺口,也有4天的缺口(如果每个日期的公式之间的差异> 0)。 姓名B:(2019-02-10-2019-01-21)+ (2019-04-01 -2019-2019-03-21),缺口数为2。
一种方法是使用collectAsList(),它检索驱动程序中的所有数据,但是是否有一种不同的有效方法可以直接在执行程序之间进行比较,如果是的话,我们如何做到这一点?
发布于 2019-08-15 17:42:48
只需编写一个带有滞后窗口的SQL查询,限定,检查相邻行的日期和日期减去1,主要关键字限定为名称。在名字里也一样排序。
您不必担心执行者,Spark会根据名称为您自动散列到由执行器提供服务的分区。
https://stackoverflow.com/questions/57494928
复制相似问题