Spark 中的倾斜

2023-12-10

我有一个数据集,我想按特定键(clientID)进行分区,但某些客户端产生的数据比其他客户端多得多。 Hive 中有一个功能称为“列表分桶“由”调用倾斜于”专门针对这种情况。

但是,我找不到任何迹象表明 Spark 支持此功能,或者如何(如果支持的话)使用它。

Spark 是否有等效的功能?或者,Spark 是否有其他一些功能可以复制此行为?

(作为奖励 - 以及我的实际用例的要求 - 您建议的方法是否适用于 Amazon Athena?)


据我所知,Spark中没有这样的开箱即用的工具。如果数据存在偏差,最常见的是添加人工列来进一步对数据进行分桶。

假设您想按列“y”进行分区,但数据非常倾斜,就像这个玩具示例一样(1 个分区有 5 行,其他分区只有一行):

val df = spark.range(8).withColumn("y", when('id < 5, 0).otherwise('id))
df.show()
+---+---+
| id|  y|
+---+---+
|  0|  0|
|  1|  0|
|  2|  0|
|  3|  0|
|  4|  0|
|  5|  5|
|  6|  6|
|  7|  7|
+-------+

现在让我们添加一个人工随机列并写入数据框。

val maxNbOfBuckets = 3
val part_df = df.withColumn("r", floor(rand() * nbOfBuckets))
part_df.show
+---+---+---+
| id|  y|  r|
+---+---+---+
|  0|  0|  2|
|  1|  0|  2|
|  2|  0|  0|
|  3|  0|  0|
|  4|  0|  1|
|  5|  5|  2|
|  6|  6|  2|
|  7|  7|  1|
+---+---+---+

// and writing. We divided the partition with 5 elements into 3 partitions.
part_df.write.partitionBy("y", "r").csv("...")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中的倾斜 的相关文章

随机推荐

  • 如何正确地将事件附加到jqGrid“列选择器”的“关闭对话框”?

    我在正确使用 jqGrid 的列选择器插件 小部件的关闭对话框事件时遇到一些问题 这就是我所拥有的 我从 jqGrid 初始化开始 最后附加了列选择器 如下所示 ticketsTable tableWrap jqGrid url datat
  • ASP.NET MVC - 服务器软件要求?

    我今天刚刚了解了 asp net mvc 我想知道服务器端需要什么来托管它 我想是 IIS 6 及更新版本 和 NET 3 5 您还需要什么吗 来自 MSDN 如何 部署 ASP NET MVC 应用程序 基本上你需要 NET 3 5 Sy
  • RoR 4 中带有验证的正则表达式

    有如下代码 class Product lt ActiveRecord Base validates title description image url presence true validates price numericalit
  • 将 Identity 2.0 函数移至存储库类

    我在我的应用程序中使用 Identity 2 0 并希望将数据功能移动到存储库层 例如以下代码 public class ApplicationDbInitializer DropCreateDatabaseIfModelChanges
  • 如何避免列表之间出现双边框?

    我正在使用列表视图 其中有一个引用可绘制 列表的 xml 如下所示
  • 如何启动 Android GCM 令牌刷新?

    根据docs 保护客户端应用程序和应用程序服务器免受潜在恶意攻击 重复使用注册token 应定期发起token 从服务器刷新 当 GCM 注册令牌刷新时 从服务器端启动 客户端应用程序必须处理 tokenRefreshed 消息与 GCM
  • 如何正确启动 Angular Universal 到实时服务器

    我通过修改此处找到的通用启动器种子来设置和工作网站 https github com angular universal starter我已经让我的网站在 localhost 节点服务器上工作 呈现 HTML 现在我已经安装了 SSH 连接
  • jQuery fullCalendar 和 qTip

    我正在考虑使用 fullCalendar 并使用 qTip 使用 eventMouseover 显示描述 有没有人设法做到这一点或知道解决方案 我已经谷歌搜索并尝试实施这个帖子但我没有任何快乐 我唯一一次让它工作时它陷入了循环并导致我的浏览
  • 可选择注入内容脚本

    内容脚本可以通过在扩展清单文件中声明以编程方式或永久注入 程序注入需要主机权限 通常由浏览器或页面操作授予 在我的用例中 我想注入 gmail outlook com 和 yahoo 邮件网站 而无需用户操作 我可以通过声明所有这些清单来做
  • 在 C++ 中以编程方式设置 Firemonkey 控件字体

    我有一个自定义 Firemonkey 控件 它扩展了TEdit这是在表单上动态创建的 我试图在创建它时设置它的字体大小 Search gt Font gt Size 15 但是 控件上的字体保持不变 我有另一个相同类型的控件 该控件已经在表
  • 在 CF.NET 中创建大位图时出现 OutOfMemoryException

    我的紧凑框架应用程序通过将所有项目渲染到大位图表面 然后将该位图复制到屏幕上的偏移位置 以便仅显示适当的项目来创建平滑滚动列表 旧版本仅渲染当时应该出现在屏幕上的项目 但这种方法对于平滑滚动界面来说太慢了 最初创建大位图时 它偶尔会生成 O
  • PHP - MySQL 从存储过程中获取输出参数的值

    我使用 PHP 从 PHP 调用了 MySQL 存储过程mysqli 它有一个输出参数 rs mysqli gt query CALL addNewUser name age id 这里 id 是输出参数 接下来 我触发以下查询来获取 ou
  • 如何从 UICollectionViewCell 呈现 AlertView

    我正在使用 UICollectionView 和标题中的地图 我想处理核心位置错误 我有 3 种错误类型 对于其中两种 我想提供一个UIAlertView 但我收到错误 因为UICollectionViewCell没有名为的成员presen
  • 使用 java 中的代理代码连接到站点

    我想通过java中的代理连接到as站点 这是我写的代码 public class ConnectThroughProxy Proxy proxy new Proxy Proxy Type HTTP new InetSocketAddress
  • wss 龙卷风连接问题

    龙卷风服务器 ssl options certfile server crt keyfile server key application Application server tornado httpserver HTTPServer a
  • Spring验证返回很长的错误消息,而不仅仅是自定义的消息

    Spring验证返回很长的错误消息而不是自定义的一次 这是 dto 中的代码部分 public class RequestDto implements Serializable NotNull message id required pri
  • IE 11 的模板标签 polyfill - 不适用于表 tr 和 td

    我使用polyfill js 它允许处理不支持它的浏览器的标签 上的polyfill源代码jsfiddle Source question 但我注意到 在 IE 11 中 这个 polyfill 无法与包含以下内容的模板一起使用 tr an
  • 使用 Visual Studio 2010 和 HG 进行版本控制

    最近 我和我的团队获得了一个用于版本控制的 HG 存储库 因为这将使我们的应用程序开发变得更容易 更好 我们使用 Visual Studio 2010 和 c 所有项目都处于版本控制之下 不幸的是 当我们其中一个人提交时 另一个人在打开解决
  • 正则表达式在所有标点符号之间添加空格

    我需要在字符串中的所有标点符号之间添加空格 Hello World gt Hello World It s 9 00 gt It s 9 00 1 B 3 D gt 1 B 3 D 我认为正则表达式是正确的方法 可以匹配所有非标点符号 a
  • Spark 中的倾斜

    我有一个数据集 我想按特定键 clientID 进行分区 但某些客户端产生的数据比其他客户端多得多 Hive 中有一个功能称为 列表分桶 由 调用倾斜于 专门针对这种情况 但是 我找不到任何迹象表明 Spark 支持此功能 或者如何 如果支