PySpark 将“map”类型的列转换为数据框中的多列

2024-04-30

Input

我有一个专栏Parameters类型的map形式:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
d = [{'Parameters': {'foo': '1', 'bar': '2', 'baz': 'aaa'}}]
df = sqlContext.createDataFrame(d)

df.collect()
# [Row(Parameters={'foo': '1', 'bar': '2', 'baz': 'aaa'})]

df.printSchema()
# root
#  |-- Parameters: map (nullable = true)
#  |    |-- key: string
#  |    |-- value: string (valueContainsNull = true)

Output

我想在 PySpark 中重塑它,以便所有键 (foo, bar等)将成为列,即:

[Row(foo='1', bar='2', baz='aaa')]

Using withColumn works:

(df
 .withColumn('foo', df.Parameters['foo'])
 .withColumn('bar', df.Parameters['bar'])
 .withColumn('baz', df.Parameters['baz'])
 .drop('Parameters')
).collect()

But 我需要一个没有明确提及列名称的解决方案,因为我有几十个。


由于钥匙MapType不是架构的一部分,您必须首先收集它们,例如如下所示:

from pyspark.sql.functions import explode

keys = (df
    .select(explode("Parameters"))
    .select("key")
    .distinct()
    .rdd.flatMap(lambda x: x)
    .collect())

当你有了这些之后,剩下的就是简单的选择:

from pyspark.sql.functions import col

exprs = [col("Parameters").getItem(k).alias(k) for k in keys]
df.select(*exprs)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PySpark 将“map”类型的列转换为数据框中的多列 的相关文章

随机推荐

  • 没有要加载的文件——readline(加载错误)

    当我想执行 Rails 3 控制台时 它会抛出以下错误 script rails c usr local rvm rubies ruby 1 9 2 p318 lib ruby 1 9 1 irb completion rb 9 in re
  • 将 css 应用到区域地图

    我创建了一个非常大的地图 其中包含许多多边形区域 每个多边形区域超过 20 个坐标 用于地图内的区域 但是 您无法将 css 添加到 AREA 标记 因为我被告知它不是可见元素 我想要做的是 当用户将鼠标悬停在地图上的某个区域上时 我希望通
  • Java线程池大小(执行器)

    我有一个有 3 个线程的应用程序 我将其切换为由 ScheduledExecutorService 管理 创建此实例时 您必须指定线程池大小 但这是什么 这是否意味着如果我计划运行 3 个任务 我应该为每个任务创建一个大小为 3 的线程池
  • 控制器中的模拟服务器

    我的控制器中有以下行 string lTempPath Path Combine Server MapPath Temp lRandomFileName 问题是服务器不是虚拟的 只能通过 getter 进行访问 I get a 该方法或操作
  • 枚举类型的命名空间 - 最佳实践

    通常 需要同时使用多种枚举类型 有时 人们会发生名字冲突 我想到了两种解决方案 使用命名空间 或使用 更大的 枚举元素名称 尽管如此 命名空间解决方案有两种可能的实现 带有嵌套枚举的虚拟类 或完整的命名空间 我正在寻找所有三种方法的优缺点
  • Haskell 有反向模式自动微分的工作实现吗?

    我见过的 Haskell 中最相关的实现是前向模式http hackage haskell org packages archive fad 1 0 doc html Numeric FAD html http hackage haskel
  • Django 组和权限。扩展组以拥有 FK?

    我正在开发一种产品 允许不同的学校在线管理他们的内容 其中一部分涉及设置我自己编写的基于角色的访问控制逻辑 本质上 每所学校都有自己的一组角色 这些角色拥有自己的一组权限 该软件的用户在任何给定时间都可能属于多个具有不同角色的学校 由于各种
  • 我应该在哪里放置 axis2.xml 以便由带有肥皂客户端的 jar 读取?

    我在 jar 文件中有一个 java 控制台应用程序 它通过调用肥皂服务axis2 http axis apache org axis2 java core 我在用这个博客 http www nandana org 2008 08 want
  • 如何从 C# (ASP.NET) 中的函数返回多个值?

    我有一个页面 其中包含一些产品和用户输入数字的文本字段 我首先使用 JavaScript 来计算总成本 根据他们输入的用户数量 他们会获得不同的费率 如下面的代码所示 当用户在文本字段中键入或粘贴数字时 将调用CalculateCost 函
  • 为什么 NHibernate 在选择时删除然后插入复合元素?

    有人可以向我解释一下关于 NHibernate 如何处理复合元素的这个小谜团吗 我的课程看起来像这样 public class Blog public virtual int Id get private set public virtua
  • IllegalStateException:无法从cursorWindow读取第0行,第-1列

    IllegalStateException 无法从cursorWindow读取第0行 第 1列 我是 Android 新手 我查看了 smiller 问题确实解决了我的问题 请帮忙提前致谢 这是我的代码 function to add da
  • 当我从 Android 设备中选择下一步时,在填写表单时,它会跳过任何下拉菜单

    我有一个由输入文本框 下拉菜单和提交按钮组成的网络表单 当我在 Android 手机上使用我的网站 chrome 浏览器 或 Android 设备上的任何浏览器 时 我使用手机键盘上的 next 导航到下一个字段 我的表单上的字段顺序 名字
  • 带有存根列表的 Pandas Wide_to_long

    我目前有以下数据框 1 1 1 2 1 3 1 4 1 5 2 1 9 5 10 1 10 2 10 3 10 4 10 5 0 0 049400 0 063812 0 097736 0 077222 0 112779 0 201620 0
  • gofabric8> 无法解压缩 /Users/apple/.fabric8/bin/oc.zip zip:不是有效的 zip

    我正在尝试为微服务设置环境 我正在使用 Fabric8 来做到这一点 我在用着mvn fabric8 cluster start Dfabric8 cluster kind openshift命令 执行时出现以下错误 INFO gofabr
  • 使用 jQuery 加载脚本时保持范围

    假设我有一个包含以下内容的文件 test js var test something 然后我有一个主要脚本需要加载 test js 以获取测试变量 显然这有效 ajax dataType script cache true url test
  • 一个或多个参数值无效:键 xyz 的类型不匹配预期:S 实际:M

    我的 AWS Lambda 根据以下答案调用 DynamoDB https stackoverflow com a 33649402 495455 https stackoverflow com a 33649402 495455 我收到错
  • NSString 中的子字符串 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在用NSString我想获取它的一个子字符串 其中包含字符串的前 20 个字符 我怎样才能做到这一点 您可以使用substringT
  • Glassfish Eclipse 插件与 jdk 8

    我正在尝试使用 glassfish eclipse plugin 启动 glassfish 4 不幸的是 它似乎无法识别我刚刚安装的 JDK 8 Release候选版本 完成 按钮保持禁用状态 如果我选择 java 7 jdk 完成按钮将启
  • GenServer 正常关闭

    我使用 GenServer 编写了一个 Elixir 应用程序 该应用程序在启动时启动外部应用程序 然后将其关闭 并在退出时进行其他清理 我在中添加了启动功能init 1 https hexdocs pm elixir GenServer
  • PySpark 将“map”类型的列转换为数据框中的多列

    Input 我有一个专栏Parameters类型的map形式 from pyspark sql import SQLContext sqlContext SQLContext sc d Parameters foo 1 bar 2 baz