- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有一个 SparkSQL 将连接 4 个大表(前 3 个表 5000 万,最后一个表 2 亿)并进行一些分组操作,消耗 60 天的数据。并且此 SQL 将需要 2 小时才能运行,在此期间,我检查到 Shuffle Write
正在急剧增加,可能会超过 200GB。
相比之下,当我将消耗日期范围从 60 天减少到 45 天时,运行只需要 6.3 分钟。我查看了 DAG 图,对于 45 天的数据,它在最后一次 sortMergeJoin 之后输出了 10 亿条数据。
谁能告诉我我可以从哪个方向优化这个场景?谢谢!
附言
可能的相关信息:
最佳答案
您需要对数据进行分区以正确并行化作业,确保 Spark UI 分区中的数据正确分布。
Spark 中连接的默认实现是随机哈希连接。混洗哈希连接通过使用与第一个相同的默认分区器对第二个数据集进行分区来确保每个分区上的数据将包含相同的键,以便来自两个数据集的具有相同哈希值的键位于同一分区中。虽然这种方法总是有效,但它可能比必要的更昂贵,因为它需要洗牌。如果出现以下情况,则可以避免洗牌:
两个 RDD 都有一个已知的分区器。
其中一个数据集小到可以放入内存,在这种情况下我们可以进行广播散列连接
最简单的优化是,如果其中一个数据集足够小以适合内存,则应该将其广播到每个计算节点。这种用例非常常见,因为数据始终需要与辅助数据(例如字典)结合。
大多数情况下,由于在网络上混洗了太多数据,连接速度很慢。通过 Broadcast join,较小的数据集被复制到所有工作节点,因此较大的 DataFrame 的原始并行性得以保持。
关于hadoop - Shuffle write 大和 spark task 变得超慢时的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652657/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!