Spark数据集/数据帧连接NULL倾斜键

2024-01-26

使用 Spark Dataset/DataFrame 连接时,我面临长时间运行并因 OOM 作业而失败。

这是输入:

  • 约 10 个不同大小的数据集,大部分都很大(>1 TB)
  • 所有左连接到一个基础数据集
  • 一些连接键是null

经过一些分析,我发现作业失败和缓慢的原因是null倾斜键:当左侧有数百万条带有连接键的记录时null.

我采取了一些蛮力方法来解决这个问题,在这里我想分享一下。

如果您有更好的或任何内置的解决方案(对于常规 Apache Spark),请分享。


我不久前也遇到过同样的问题,但在进行一些性能测试后我选择了另一种方法。这取决于您的数据,数据会告诉您解决此连接问题的更好算法是什么。

就我而言,连接左侧有超过 30% 的数据为 null,并且数据采用 parquet 格式。鉴于此,我最好执行filter当该键为空且该键不为空时,仅当不为空时才加入,然后将两个数据合并。

val data = ...
val notJoinable = data.filter('keyToJoin.isNull)
val joinable = data.filter('keyToJoin.isNotNull)

joinable.join(...) union notJoinable

它也避免了热点。如果我使用你的方法(负数/无论什么不是“可连接”值),spark将洗牌所有这些数据,这是大量数据(超过30%)。

只是想向您展示解决问题的另一种方法,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark数据集/数据帧连接NULL倾斜键 的相关文章

  • Spark 上的 Kubernetes 驱动程序 pod 清理

    我在 kubernetes 1 19 上运行 Spark 3 1 1 作业完成后 执行程序 Pod 就会被清理 但驱动程序 Pod 仍处于完成状态 驱动程序完成后如何清理 要设置任何配置选项吗 NAME READY STATUS RESTA
  • 更改spark_temporary目录路径

    是否可以更改 temporarySpark在写入之前保存临时文件的目录 特别是 由于我正在编写表的单个分区 因此我希望临时文件夹位于分区文件夹内 是否可以 由于其实现原因 无法使用默认的 FileOutputCommiter FileOut
  • Scala中如何将DataFrame转换为RDD?

    有人可以分享一下如何转换dataframe to an RDD Simply val rows RDD Row df rdd
  • Spark - Scala - 用另一个数据帧中的查找值替换数据帧中的值

    我正在 Databricks 上使用 Spark 编程语言是Scala 我有两个数据框 主要数据框 见截图 1 https i stack imgur com EShir png 查找数据框 见截图3 https i stack imgur
  • Spark 物理计划和逻辑计划

    我有两个问题 在不添加任何额外代码来打印提交的 Spark 作业的逻辑和物理计划的情况下 有没有办法查看集群上运行的 Spark 作业的物理和逻辑计划 有没有办法动态修改集群上正在运行的 Spark 作业的执行计划以获得更好的性能 请分享您
  • Spark:用列的平均值替换数据框中的空值

    如何创建 UDF 以编程方式将每列中 Spark 数据框中的空值替换为列平均值 例如 在示例中 数据 col1 空值的值为 2 4 6 8 5 5 5 示例数据 col1 col2 col3 2 null 3 4 3 3 6 5 null
  • 将 Scala Dataframe 写入 CSV 文件时应用 UTF8 编码

    在 Spark2 Scala 中将数据帧写入 CSV 文件时如何正确应用 UTF8 编码 我正在使用这个 df repartition 1 write mode SaveMode Overwrite format csv option he
  • Spark SQL 广播提示中间表

    我在使用广播提示时遇到问题 可能是缺乏 SQL 知识 我有一个查询 例如 SELECT broadcast a FROM a INNER JOIN b ON INNER JOIN c on 我想要做 SELECT broadcast a F
  • Sparklyr - 在 Apache Spark Join 中包含空值

    问题在 Apache Spark Join 中包含空值 https stackoverflow com questions 41728762 including null values in an apache spark join有 Sc
  • Spark-获取RDD中的文件名

    我正在尝试处理每天都在增长的 4 个文本文件目录 我需要做的是 如果有人试图搜索发票号码 我应该给他们包含该发票号码的文件列表 我能够通过将文本文件加载为 RDD 来映射和减少文本文件中的值 但是如何获取文件名和其他文件属性呢 从 Spar
  • Pyspark显示最大值(S)和多重排序

    感谢这里的一些帮助 使用Pyspark 请不能使用SQL 所以我有一个存储为 RDD 对的元组列表 城市1 2020 03 27 X1 44 城市1 2020 03 28 X1 44 City3 2020 03 28 X3 15 City4
  • scala/spark 代码不允许在 hive 中添加列

    如果源数据有新列 我尝试在 Hive 表中添加一列 所有新列的检测都运行良好 但是 当我尝试将列添加到目标表时 我收到此错误 for f lt df schema fields if f name chk spark sqlContext
  • Spark - 如何在本地运行独立集群

    是否有可能运行Spark独立集群仅在一台机器上进行本地操作 这与仅在本地开发作业基本上不同 即local 到目前为止 我正在运行 2 个不同的虚拟机来构建集群 如果我可以在同一台机器上运行一个独立的集群 该怎么办 例如三个不同的 JVM 正
  • Spark Scala 将列从一个数据帧复制到另一个数据帧

    我有一个原始数据框的修改版本 我在其上进行了聚类 现在我想将预测列恢复为原始 DF 索引没问题 因此匹配 我该怎么做 使用这段代码我得到一个错误 println Predicted dfWithOutput show println Ori
  • Spark:Shuffle Write、Shuffle 溢出(内存)、Shuffle 溢出(磁盘)之间的区别?

    我有以下 Spark 工作 试图将所有内容保留在内存中 val myOutRDD myInRDD flatMap fp gt val tuple2List ListBuffer String myClass ListBuffer tuple
  • 如何使用 SparkR 1.6.0 写入 JDBC 源?

    使用 SparkR 1 6 0 我可以使用以下代码从 JDBC 源读取数据 jdbc url lt jdbc mysql localhost 3306 dashboard user
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 如何在spark Streaming中定期更新rdd

    我的代码是这样的 sc SparkContext ssc StreamingContext sc 30 initRDD sc parallelize path to data lines ssc socketTextStream local
  • 如何在 apache Spark 作业中执行阻塞 IO?

    如果当我遍历 RDD 时 我需要通过调用外部 阻塞 服务来计算数据集中的值怎么办 您认为如何才能实现这一目标 值 Future RDD Double Future sequence tasks 我尝试创建一个 Futures 列表 但由于
  • 行类型 Spark 数据集的编码器

    我想写一个编码器Row https spark apache org docs 2 0 0 api java index html org apache spark sql Row html输入 DataSet 用于我正在执行的地图操作 本

随机推荐

  • 如何将密码从文件传递到mysql命令?

    我有一个 shell 脚本 它使用外部文件中的一个参数调用 mysql 命令 它看起来像这样 我也在其他资源中看到了这个示例 mysql user root password cat root mysql 有点不工作 无法连接到 MySQL
  • Android 操作栏(如 Twitter 示例)

    实现 Twitter 示例 UI 模式等操作栏的最佳方法是什么 Android 版 Twitter 深入了解 Android 不断演变的 UI 模式 模式4 操作栏http android developers blogspot com 2
  • 在 Powershell 中写入十六进制转义字符

    有没有办法在Powershell中写这样的东西 Linux 将与 Perl 一起使用 char foo x41 我需要在我的一个程序中输入一些不可打印的字符 你可以这样做将 int 转换为 char 带十进制数 foo 65 as char
  • HttpClient GetAsync 方法 403 错误

    我正在尝试简单地显示 github 存储库 网址 https api github com search repositories q pluralsight https api github com search repositories
  • 使用cmd命令打开pwsh而不退出

    我正在尝试启动一个 Powershell 窗口 使用以下命令启动 ssh 会话 pwsh exe noexit Command ssh
  • 如何在 LINQ 中对单个联接中的多个字段进行左联接

    我正在尝试对 LINQ 执行这个简单的 sql 查询 但它给了我错误 这是需要转换为 LINQ 的 SQL 查询 DECLARE groupID int SET groupID 2 SELECT FROM dbo Person p LEFT
  • C++ 中两个向量的逐元素乘法

    我试图用两个向量进行以下数学运算 v1 a1 a2 a3 a4 a5 v2 b1 b2 b3 b4 b5 想要计算 v a2 b2 a3 b3 a4 b4 a5 b5 请注意 我不想要新向量中的第一个元素 我想知道是否有一种比 for 循环
  • Mongo shell 中的 NumberLong 算术

    如何在 Mongo shell 中对 NumberLong 值执行精确算术 据我了解 Javascript 只有一种数字类型 number 通常限制为 54 位浮点精度 使用 例如 标准加法的直接算术显示将强制转换为较低精度类型 gt Nu
  • 向 geom_bar() / geom_col() 条添加图案或纹理?

    有时 我需要某种用于 geom bar geom col 条的图案或纹理 即用于黑白打印 例如 以下内容对于某些人来说可能很难查看 library ggplot2 library dplyr warn conflicts FALSE lib
  • 设置标头并使用 $http POST 发送数据到 pocket api 返回 CORS

    无法向 pocket api 发送 http post 请求以获取请求令牌 我已经拿到消费者密钥了 问题似乎出在设置标头和发送请求中的数据 在浏览器中查看请求时 不会显示任何标头和数据 配置请求 var req method POST ur
  • 从整数的商中获取双精度值

    int velMperMin 667 int distM 70 double movT distM velMperMin 60 movtT必须等于6 30 但它是0 您需要将除法的操作数之一转换为双精度值 像这样 double movT d
  • 使用 UMAP 和 HDBScan 进行集群

    我有大量的文本数据 大约有 5000 人输入 我使用 Doc2vec 为每个人分配了一个向量 使用 UMAP 缩减为二维 并使用 HDBSCAN 突出显示其中包含的组 目的是突出具有相似主题相似性的组 这导致了如下所示的散点图 这看起来可以
  • Gitlab CI如何部署最新到特定目录

    我在 Gitlab 中有两个项目 其中一个是另一个项目 我们称这个存储库为 main 的子模块 我们称其为 前端模板 我已经为 frontend templates 存储库设置了 Gitlab CI 构建 问题是我不需要测试或构建 我只需要
  • 将 UIView 中的标签居中

    将标签居中的最佳方法是什么UIView 如果你做了类似的事情 UILabel myLabel UILabel alloc initWithFrame CGRectMake view frame origin x 2 view frame o
  • Flask 只能看到通过curl 发送的多个参数中的第一个参数

    我正在使用curl 向需要多个查询参数的Flask 路由发出请求 但是 日志仅显示 url 中的第一个参数 Flask 看不到第二个参数 出了什么问题 app route path methods GET def foo print req
  • 从 .NET 3.5 WCF Web 服务 (REST) 返回 JSON 和 XML 格式

    我有一个返回 XML 响应的现有 Web 服务 我想添加一些返回 JSON 的新方法 我是否必须创建一个以 JSON 形式返回的单独 Web 服务 还是可以混合使用 如果我使用 ResponseFormat WebMessageFormat
  • 设置 分钟间隔 时 UIDatePicker 的奇怪行为

    以下代码在 iOS 4 3 下显示奇怪的行为 也许其他版本也是如此 在这个例子中 一个UIDatePicker其日期设置为4 Aug 2011 2 31 PM被展示 这UILabel以下UIDatePicker显示日期以供参考 他们三个UI
  • 重写派生类中的成员字段

    我有下面的代码片段 include
  • 如何将 pygame 应用程序转换为 iOS 应用程序

    我使用 pygame 在 python 中编写了一个非常小的未完成的游戏 有没有一种简单的方法可以将其转换为我可以在 iPhone 上使用和测试的应用程序 而无需在 kivvy 等中重写整个代码 没有简单的方法 不可能转换代码 但对于一款简
  • Spark数据集/数据帧连接NULL倾斜键

    使用 Spark Dataset DataFrame 连接时 我面临长时间运行并因 OOM 作业而失败 这是输入 约 10 个不同大小的数据集 大部分都很大 gt 1 TB 所有左连接到一个基础数据集 一些连接键是null 经过一些分析 我