如何在数据帧中引用广播变量

2023-12-31

我用的是spark1.6。我尝试广播 RDD,但不确定如何访问数据帧中的广播变量?

我有两个数据框员工和部门。

员工数据框

-------------------
Emp Id | Emp Name | Emp_Age
------------------
1 | john | 25

2 | David | 35

部门数据框

--------------------
Dept Id | Dept Name | Emp Id
-----------------------------
1 | Admin | 1

2 | HR | 2

import scala.collection.Map

val df_emp = hiveContext.sql("select * from emp")

val df_dept = hiveContext.sql("select * from dept")

val rdd = df_emp.rdd.map(row => (row.getInt(0),row.getString(1)))

val lkp = rdd.collectAsMap()

val bc = sc.broadcast(lkp)

print(bc.value.get(1).get)

--Below statement doesn't work

val combinedDF = df_dept.withColumn("emp_name",bc.value.get($"emp_id").get)
  1. 如何在上面的combinedDF语句中引用广播变量?
  2. 如果lkp没有返回任何值怎么处理?
  3. 有没有办法从 lkp 返回多条记录(假设在查找中有 2 条 emp_id=1 的记录,我想获取这两条记录)
  4. 如何从广播返回多个值...(emp_name & emp_age)

如何在上面的combinedDF语句中引用广播变量?

Use udf. If emp_id is Int

val f = udf((emp_id: Int) =>  bc.value.get(emp_id))

df_dept.withColumn("emp_name", f($"emp_id"))

如果lkp没有返回任何值怎么处理?

不要使用get如上图

有没有办法从lkp返回多条记录

Use groupByKey:

val lkp = rdd.groupByKey.collectAsMap()

and explode:

df_dept.withColumn("emp_name", f($"emp_id")).withColumn("emp_name", explode($"emp_name"))

或者直接跳过所有步骤broadcast:

import org.apache.spark.sql.functions._

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

如何在数据帧中引用广播变量 的相关文章

随机推荐

  • 在 CentOS 上“脚本输出在标题之前结束”,但在其他 LAMP 堆栈上工作

    我已经设置了 Centos 6 CPanel 11 VPS 一切都与开箱即用的一样 我已在 public html 目录中安装了 Phorum 5 2 20 但 Phorum 导致错误 500 错误日志报告 Mon Jul 27 11 21
  • 我可以将 intel 的 TBB 与 gcc 一起使用吗?

    我可以将 intel 的 TBB 与 gcc 一起使用吗 如果不是 那么等效的东西是什么 以便我可以在使用 gcc 编译时使用它 我认为我不能 但最好还是问一下 你可以 这就是他们的文档 http threadingbuildingbloc
  • TCP 客户端和服务器,使用 objectstreams 的 cmd 提示符

    我有一个客户端文件 clientRPC java 和服务器文件 serverRPC java 两者都使用TCP协议进行通信 并使用对象输入和输出流来传输数据 我的客户文件 public class clientRPC public stat
  • 使用curftpfs 进行FTP 速度非常慢,以至于无法使用

    我使用curftpfs安装了ftp位置 问题是它非常慢 以至于毫无用处 执行几乎所有操作的时间约为 10 秒 它甚至包括让任何 VIM 命令正常工作 包括导航 我开始认为我可能做错了什么 因为根本不可能以这种响应能力来工作 如果我在 vim
  • 在 iOS 7 中如何将用户背景添加到应用程序中作为半透明背景?

    我想知道是否可以让用户将背景设置为 iOS 7 中的实际应用程序背景 类似于当用户没有放置任何杂志时 报亭将用户背景作为半透明元素提供 在plist集中UIApplicationIsOpaque to NO 假 然后设置 self wind
  • 无法在phonegap中显示联系人数据图像

    我正在尝试使用以下代码获取联系人个人资料图片 即联系人数据的头像PhoneGap for android但我得到以下网址作为回报 我不知道如何在img tag Code var defaultImagePath resources imag
  • 如何将此 zsh 函数转换为 Fish shell?

    我有这个函数 在 zsh 中运行得很好 但我想将它转换为 Fish shell 但无法让它运行 function ogf echo Cloning your editor will open when clone has completed
  • Android如何计算最佳缩放级别?

    如何计算跟踪路线的缩放级别以完美适合地图 屏幕 的视图 我在经度 纬度位置有根 整个轨道 的起点和终点 我可以使用输入参数米计算缩放级别 但是我需要设置多少米 我想在地图上显示记录的轨迹 我显示了路线 但不适合地图 您可以使用此代码片段设置
  • 记录读取器和记录边界

    假设我有一个输入文件 并且 HDFS 中为该文件创建了三个块 假设我有三个数据节点 每个数据节点存储一个块 如果我有 3 个输入拆分 则 3 个映射器将并行运行以处理相应数据节点本地的数据 每个映射器使用输入格式和记录读取器以键值对形式获取
  • ASP.NET MVC AjaxForm 未正确更新部分视图

    我不确定我做错了什么 我以前从未遇到过这个问题 或者也许我有过 但我从未注意到 我有一个带有部分视图的页面 提交页面时 会检查模型是否有 ID 如果是 则会更新记录 如果没有 它会创建一个新的 相当标准 完成后 模型将返回到视图 我似乎遇到
  • WPF - 带按钮的列表视图

    我有一个列表视图模板 其中一列是一个按钮 当我单击此按钮时 我需要选择项目 我怎样才能做到这一点 要捕获按钮按下事件中选定的 ListView 项目 您可以利用 MVVM 模式 在 ListView 的 XAML 中 我将 ItemsSou
  • 将带有解析的推送通知发送到单个设备

    我可以在 Android 应用程序中仅向一台特定设备发送推送消息吗 可能使用设备 ID 而不是每个设备 一个简单的 是的 可以使用解析 或 不 你不能使用解析 就足够了 如果答案是肯定的那么我需要知道如何 您可以将设备 ID 保存在Pars
  • “2<&1”重定向在 Bourne shell 中起什么作用?

    2 gt 1Bourne shell 中的重定向将发送到文件描述符 2 默认情况下为标准错误 的输出发送到文件描述符 1 默认情况下为标准输出 但有什么作用2 lt 1重定向做什么 它会将 stderr 发送到 stdin 吗 我的理论是它
  • Django 中的灵活分页

    我想实现分页 以便用户可以选择每页的记录数 例如 10 25 50 等 我应该如何处理 是否有一个应用程序可以添加到我的项目中来执行此操作 Thanks Django 在核心中内置了一个 Paginator 对象 这是一个使用起来相当简单的
  • set-cookie 标头未在 Edge 中设置 cookie

    我正在本地测试一个应用程序并发出授权请求http localhost 3000 api auth 登录 http localhost 3000 api auth login 响应中将返回 set cookie 标头以及 JWT 身份验证令牌
  • 流星卡在提取中 [电子邮件受保护]

    我遇到一个问题 我在我的项目中运行meteor 并且它开始安装 电子邮件受保护 cdn cgi l email protection 一旦达到 100 就会显示 提取 电子邮件受保护 cdn cgi l email protection 但
  • ggplot2:用直线连接极坐标中的点2

    coord polar曲线 有时您可能不希望这样做 即当空间被认为是离散的而不是连续的时 iris gt gather dim val Species gt group by dim Species gt summarise val mea
  • 为什么需要为 iTerm 中的每个新 shell 获取 .zshrc 源?

    在过去的 3 年里 我每天都将 Iterm2 与 zsh 一起使用 但我有了一台新计算机 不得不重新设置它 问题是当我跑步时 zshrc它工作正常 但我必须在打开的每个新终端窗口上执行此操作 不是一个好的经历 我注意到我没有任何bashrc
  • GWT - FlowPanel 和调整大小

    我有一些Composite我的应用程序中使用的小部件FlowPanel作为他们的主要元素 我想知道的是 我是否需要为此以任何方式调整大小 FlowPanel不实施RequiresResize 所以我不能使用ResizeComposite 但
  • 如何在数据帧中引用广播变量

    我用的是spark1 6 我尝试广播 RDD 但不确定如何访问数据帧中的广播变量 我有两个数据框员工和部门 员工数据框 Emp Id Emp Name Emp Age 1 john 25 2 David 35 部门数据框 Dept Id D