Spark 中的 Distinct() 函数如何工作?

2024-05-15

我是 Apache Spark 的新手,正在学习基本功能。 有一个小疑问。假设我有一个元组(键,值)的 RDD,并且想从中获取一些唯一的元组。我使用distinct()函数。我想知道该函数基于什么基础认为元组是不同的..?是基于键、值还是两者?


.distinct()肯定是跨分区进行随机播放。要了解更多发生的情况,请运行.toDebugString在你的 RDD 上。

val hashPart = new HashPartitioner(<number of partitions>)

val myRDDPreStep = <load some RDD>

val myRDD = myRDDPreStep.distinct.partitionBy(hashPart).setName("myRDD").persist(StorageLevel.MEMORY_AND_DISK_SER)
myRDD.checkpoint
println(myRDD.toDebugString)

对于我的 RDD 示例(myRDDPreStep 已按键进行哈希分区,由 StorageLevel.MEMORY_AND_DISK_SER 保存并设置检查点),返回:

(2568) myRDD ShuffledRDD[11] at partitionBy at mycode.scala:223 [Disk Memory Serialized 1x Replicated]
+-(2568) MapPartitionsRDD[10] at distinct at mycode.scala:223 [Disk Memory Serialized 1x Replicated]
    |    ShuffledRDD[9] at distinct at mycode.scala:223 [Disk Memory Serialized 1x Replicated]
    +-(2568) MapPartitionsRDD[8] at distinct at mycode.scala:223 [Disk Memory Serialized 1x Replicated]
        |    myRDDPreStep ShuffledRDD[6] at partitionBy at mycode.scala:193 [Disk Memory Serialized 1x Replicated]
        |        CachedPartitions: 2568; MemorySize: 362.4 GB; TachyonSize: 0.0 B; DiskSize: 0.0 B
        |    myRDD[7] at count at mycode.scala:214 [Disk Memory Serialized 1x Replicated]

请注意,可能有更有效的方法来获得涉及更少洗牌的不同,特别是如果您的 RDD 已经以智能方式分区并且分区没有过度倾斜。

See 有没有办法重写Spark RDD unique以使用mapPartitions而不是distinct? https://stackoverflow.com/questions/31082066/is-there-a-way-to-rewrite-spark-rdd-distinct-to-use-mappartitions-instead-of-di and Apache Spark:使用 RDD.aggregateByKey() 的 RDD.groupByKey() 的等效实现是什么? https://stackoverflow.com/questions/31081563/apache-spark-what-is-the-equivalent-implementation-of-rdd-groupbykey-using-rd

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

Spark 中的 Distinct() 函数如何工作? 的相关文章

随机推荐

  • [SqlException (0x80131904) 的问题:无效的对象名称“dbo.TableName”。]

    我在 google 和 stackoverflow 中查找 但没有找到答案 如何通过 VS 2010 中的连接字符串连接到我的数据库表
  • 手动更新目标后,单向绑定停止工作

    我有这样的WPF绑定代码 TestModel source new TestModel TestModel target new TestModel Bind source target BindingMode OneWay source
  • 正则表达式允许零,只要它不是第一个数字[重复]

    这个问题在这里已经有答案了 昨天我在这里发布了一个问题正则表达式允许 null 或 1 到 9 数字 https stackoverflow com questions 40354842 regular expression allow n
  • 如何在 SQL Server 中创建文件格式

    我正在尝试在 SQL Server 2017 中试验外部文件 但在第一步中遇到了困难 数据是管道分隔的 我试图遵循文档中的语法 这需要一个FILE FORMAT 以下是 Microsoft 的语法 CREATE EXTERNAL TABLE
  • 创建包罗万象的路由

    我在网上找到了几个在 ASP NET MVC 中创建包罗万象的路由的示例 尤其是在 StackOverflow 上 但这似乎在 MVC4 中对我不起作用 public static void RegisterRoutes RouteColl
  • 如何使用 CLI 在 Angular 4 中创建新组件

    在角度2中我使用 ng g c componentname 但 Angular 4 不支持它 所以我手动创建了它 但它显示错误 它不是一个模块 在 Angular4 中这也是一样的 如果您遇到错误 我认为您的问题出在其他地方 在命令提示符下
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 如何将设备屏幕位置转换为发送事件位置?

    我知道关于input tap x yshell 命令 但是 我想了解如何 使用执行单击sendevent命令 我能够通过以下命令实现它 sendevent dev input event5 3 53 X sendevent dev inpu
  • postgresql 中的锁定表

    我有一个名为 games 其中包含一个名为 title 该列是唯一的 数据库中使用PostgreSQL 我有一个用户输入表单 允许他插入新的 game in games 桌子 插入新游戏的功能会检查之前输入的游戏是否存在 game 与相同的
  • 仅为登录用户显示菜单项

    我是 ASP NET MVC 新手 正在使用该框架的 1 0 版本 我有一个 site master 页面 其中包含以下硬编码菜单 div ul li li li li li li li li ul div
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • Scala Spark 包含与不包含

    我可以使用 contains 过滤 RDD 中的元组 如下所示 但是使用 不包含 来过滤 RDD 又如何呢 val rdd2 rdd1 filter x gt x 1 contains 我找不到这个的语法 假设这是可能的并且我没有使用Dat
  • URL.createObjectURL 在react-native中不起作用,是否有其他方法来创建url?

    我正在尝试在react native应用程序中显示pdf文件 这是我的代码 从 api 获取 blob Blob data Object blobId 85225e45 7f45 463b bd62 a9170551a3b7 lastMod
  • 如何在Web Activity中使用数据集和linkedServices?

    有人能给我一个关于使用这两个属性的完整示例吗 而且里面有一些奇怪的东西官方示例 https learn microsoft com en us azure data factory control flow web activity bod
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • 从 SQLite 命令行 shell 中打开数据库文件

    我正在使用SQLite 命令行外壳 http www sqlite org sqlite html 如文档所述 我可以通过将数据库作为可执行文件的参数提供来打开数据库 sqlite3 data db 我不知道如何打开数据库文件在工具内在调用
  • Grails + Spring Security:无法登录

    我刚刚开始学习Grails和Spring 我已经按照官方教程创建了一个登录系统 但我无法登录 用户名或密码不匹配 我知道 90 的情况下这是由于双重编码或多个数据源 这也导致双重编码 造成的 但我也没有这样做 class BootStrap
  • 使 'n' 始终向前搜索,无论是否 / 或 ?用于搜索

    我几乎总是在 Vim 中搜索 然后继续向前搜索n并向后N 然而 有时我会使用 跳转到我当前所在行上方几行的项目 在这种情况下 如果我想向前搜索同一项目 我必须使用N代替n 令人烦恼的心理减速带 所以我的问题是 是否有可能使n永远向前走 并且
  • python 3 argparse 调用函数

    我想在 python3 中创建一个类似命令行 类似 shell 的界面 Argparse 似乎负责解析和显示帮助 错误消息 根据argparse 的 python3 文档 https docs python org 3 5 library
  • Spark 中的 Distinct() 函数如何工作?

    我是 Apache Spark 的新手 正在学习基本功能 有一个小疑问 假设我有一个元组 键 值 的 RDD 并且想从中获取一些唯一的元组 我使用distinct 函数 我想知道该函数基于什么基础认为元组是不同的 是基于键 值还是两者 di