apache-spark - 在 Spark 中比较跨执行程序的数据
问题描述
我们有一个 Spark 应用程序,其中数据在不同的执行者之间共享。但是我们还需要比较executor之间的数据,其中一些数据存在于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(),它将所有数据检索到驱动程序,但是是否有不同的有效方法可以直接在执行程序之间进行比较,如果是,我们该怎么做?
解决方案
只需编写一个带有延迟窗口、限定条件的 SQL 查询,检查相邻行的日期广告日期减 1,主要关键限定条件是名称。在名称中也进行排序。
您不必担心 Executor,Spark 会根据 Name 自动为您散列到由 Executor 服务的 Partition。
推荐阅读
- java - 严重:开始事件引发错误 java.lang.ExceptionInInitializerError Intellij/Tomcat
- python - 如何让 PyCharm 在输出控制台中显示整个数据框?
- eiffel - Eiffel:如何设置自动测试的命令行参数?
- javascript - JavaScript 错误使用
使用 ColdFusion 2018 标记 - ios - ios 应用程序加载程序登录挂起
- laravel - Laravel Scope 查询以计算每个用户的项目类型
- graphics - 在 Vulkan 中创建统一缓冲区
- scala - Scala NetLogo Extension API:访问全局/模型参数
- node.js - 没有 NGINX 或任何其他代理的 Ubuntu 上的 Node.js 是不可取的,甚至是不可能的?
- ansible - 使用命令语法的 Ansible 复制文件