在地图列的 Spark 数据框中如何使用所有键的常量更新值

2024-02-07

我有 Spark 数据框,其中包含 Integer 和 Map 类型的两列,我想知道更新映射列的所有键的值的最佳方法。

在 UDF 的帮助下,我能够更新值

def modifyValues = (map_data: Map[String, Int]) => {
      val divideWith = 10
      map_data.mapValues( _ / divideWith)
    }
val modifyMapValues = udf(modifyValues)
df.withColumn("updatedValues", modifyMapValues($"data_map"))


scala> dF.printSchema()
root
 |-- id: integer (nullable = true)
 |-- data_map: map (nullable = true)
 |    |-- key: string
 |    |-- value: integer (valueContainsNull = true)

样本数据:

>val ds = Seq(
  (1, Map("foo" -> 100, "bar" -> 200)),
  (2, Map("foo" -> 200)),
  (3, Map("bar" -> 200))
).toDF("id", "data_map")

Expected output:
+---+-----------------------+
|id |data_map               |
+---+-----------------------+
|1  |[foo -> 10, bar -> 20] |
|2  |[foo -> 20]            |
|3  |[bar -> 1]             |
+---+-----------------------+

想知道,有没有办法在没有 UDF 的情况下做到这一点?


一种可能的方法(没有 UDF)是这样的:

  1. 使用提取密钥map_keys到一个数组
  2. 使用提取值map_values到一个数组
  3. 使用转换提取的值TRANSFORM(从 Spark 2.4 开始可用)
  4. 使用创建回地图map_from_arrays
import org.apache.spark.sql.functions.{expr, map_from_arrays, map_values, map_keys}

ds
.withColumn("values", map_values($"data_map"))
.withColumn("keys", map_keys($"data_map"))
.withColumn("values_transformed", expr("TRANSFORM(values, v -> v/10)"))
.withColumn("data_map_transformed", map_from_arrays($"keys", $"values_transformed"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在地图列的 Spark 数据框中如何使用所有键的常量更新值 的相关文章

随机推荐

  • GeoPandas 和 OSMnx - 在地图上绘制

    我想在地图上绘制我的 Geopandas df 作为背景 我想要该地区的 道路 地图 喜欢 OSMnx 包 我试图弄清楚如何使用它的输出 shapefile 网络 作为我的情节背景 import osmnx as ox G ox core
  • Response.Redirect 与 Server.Transfer - 重定向作为“建议”

    所以我读了一篇article http www csharpfriends com Articles getArticle aspx articleID 15在 Response Redirect 上 与 Server Transfer 相
  • iOS Facebook 获取用户的电子邮件

    我尝试了 2000 多种方法来获取用户的电子邮件 我无法从 Facebook SDK 的图形 API 获取它 它不包含电子邮件属性 我还尝试手动将电子邮件属性添加到 FB 框架 但没有任何反应 是否可以下载第一个与 iOS 7 兼容的 FB
  • R中如何合并表?

    我想这会有一个简单的答案 但我无法解决 这是一个使用的示例iris数据集 a lt table iris 2 b lt table iris 3 如何将这两个表添加到一起 例如 在新输出表中 变量 3 的值为 27 26 1 变量 3 3
  • 在 Tomcat 中使用 Spring 通过 JMX 公开 Hibernate(缓存)统计信息

    收集 Hibernate Ehcache 统计信息并在基于 Spring 的设置中通过 JMX 公开它们似乎很容易 互联网有很多资源可以帮助您 例如http snippets dzone com posts show 11159 http
  • 在bash中重复打印一个字符[重复]

    这个问题在这里已经有答案了 有没有办法在 bash 中重复打印相同的字符 就像您可以使用此构造在 python 中执行此操作一样 print 3 gives 实际上有一个单行代码可以做到这一点 printf 0 s 1 10 prints
  • VB6 .frm 文件格式属性无故更改!

    我们 我们的公司 注意到 在从不同用户 机器将代码签入到我们的存储库之间 VB6 表单文件内的 Format 属性不断变化 即使我们没有在 PC 上更改任何内容 之前 格式 82182147 之后 格式 69337091 它给我们的源代码比
  • 数据帧子集性能

    我有几个大型数据帧 100 万行以上 x 6 10 列 需要重复进行子集化 子集部分是我的代码中最慢的部分 我很好奇是否有办法更快地做到这一点 load https dl dropbox com u 4131944 Temp DF IOST
  • Pascal 对象:如何进行类型化前向声明?

    我正在将很棒的 fmod C 标头翻译为 Pascal 但由于前向声明而陷入困境 如果我声明该函数before类型 错误为 FMOD CODEC STATE 未知 如果我声明 FMOD CODEC STATEbefore该函数 错误为 FM
  • 如何在 CherryPy 中执行异步后处理?

    Context 想象一下您有一个标准的 CherryPy hello word 应用程序 def index self return Hello world index exposed True 并且您想要进行一些后处理 即记录请求处理或仅
  • 如何从命令行在 Ubuntu Linux 上打开 AVD 管理器?

    如何从命令行在 Ubuntu Linux 上打开 AVD 管理器 对于那些来这里是因为android avd命令已被弃用 现在的操作方法如下 使用Android Studio 使用有效的 studio 项目打开 Android Studio
  • XMPP 使用哪个端口?

    我搜索过但没有找到 XMPP 使用哪些端口 我需要实现XMPP服务器和客户端并使用XML传输 文件传输和流媒体 他们使用不同的端口吗 有没有办法让它们都一样使用 这样我就不需要打扰网络管理员 谢谢 根据维基百科 http en wikipe
  • 意外标记:LIMIT

    当我将上述依赖项与 NamedQuery 一起使用时 我在错误部分收到错误提示 注意 请指教 是jar问题还是JBOSS问题 我在 Jboss 7 版本中使用 jdk1 7 运行此代码 使用 EntityManager 使用命名查询 Que
  • 编写优秀的 Twisted 网络资源

    我编写了第一个 Twisted 10 1 0 网络Resource我正在寻求反馈 因为我觉得这并不完全遵循最佳实践 并且可能包含新手错误 资源响应 url http www foo baz abc123并依赖于返回的服务dict 如果出现任
  • “尝试设置非属性列表对象......”带有自定义类的 NSMutableDictionary [重复]

    这个问题在这里已经有答案了 我有一个名为的自定义类ServerModule这是一个子类NSObject 我基本上存储了所有这些ServerModules 中包含一个键值对NSMutableDictionary 然后字典存储在NSUserDe
  • 主体参数不能与表单参数一起使用 - 具有 Headers 和 json 数据的 Feign 客户端

    我有一个像这样的 FeignClient RequestLine POST enroll Headers header1 header1 header2 header2 Content Type application json Respo
  • 还有什么更好的方法来解决 Python 中的“静态变量”呢?

    似乎在Python中 要在类中声明变量 它是静态的 在下一个实例中保留其值 有什么更好的方法来解决这个问题 class Foo number 0 def set self self number 1 gt gt gt foo Foo gt
  • Keras 2,TypeError:无法pickle _thread.lock对象

    我正在使用 Keras 创建一个 ANN 并在网络上进行网格搜索 我在运行以下代码时遇到以下错误 model KerasClassifier build fn create model input dim verbose 0 define
  • 如何在与当前片段相同的空间中加载新片段

    我正在寻找一些关于处理启动其他片段的片段的最佳方法的建议 我正在转换一个应用程序 我开始使用更多基于活动的方法编写该应用程序 并开始将其转移到使用片段 我有一些用于启动新活动的片段 我想将它们移至当前片段所在的同一视图中启动其他片段 例如
  • 在地图列的 Spark 数据框中如何使用所有键的常量更新值

    我有 Spark 数据框 其中包含 Integer 和 Map 类型的两列 我想知道更新映射列的所有键的值的最佳方法 在 UDF 的帮助下 我能够更新值 def modifyValues map data Map String Int gt