PySpark 数据帧 to_json() 函数

2023-11-23

我有一个如下所示的数据框,

>>> df.show(10,False)
+-----+----+---+------+
|id   |name|age|salary|
+-----+----+---+------+
|10001|alex|30 |75000 |
|10002|bob |31 |80000 |
|10003|deb |31 |80000 |
|10004|john|33 |85000 |
|10005|sam |30 |75000 |
+-----+----+---+------+

将 df 的整行转换为一个新列“jsonCol”,

>>> newDf1 = df.withColumn("jsonCol", to_json(struct([df[x] for x in df.columns])))
>>> newDf1.show(10,False)
+-----+----+---+------+--------------------------------------------------------+
|id   |name|age|salary|jsonCol                                                 |
+-----+----+---+------+--------------------------------------------------------+
|10001|alex|30 |75000 |{"id":"10001","name":"alex","age":"30","salary":"75000"}|
|10002|bob |31 |80000 |{"id":"10002","name":"bob","age":"31","salary":"80000"} |
|10003|deb |31 |80000 |{"id":"10003","name":"deb","age":"31","salary":"80000"} |
|10004|john|33 |85000 |{"id":"10004","name":"john","age":"33","salary":"85000"}|
|10005|sam |30 |75000 |{"id":"10005","name":"sam","age":"30","salary":"75000"} |
+-----+----+---+------+--------------------------------------------------------+

我需要一个解决方案来根据字段的值仅选择几列,而不是像上面的步骤那样将整行转换为 JSON 字符串。我在下面的命令中提供了示例条件。

但是当我开始使用when函数时,生成的JSON字符串的列名(键)消失了。仅通过位置获取列名称,而不是实际的列名称(键)

>>> newDf2 = df.withColumn("jsonCol", to_json(struct([ when(col(x)!="  ",df[x]).otherwise(None) for x in df.columns])))
>>> newDf2.show(10,False)
+-----+----+---+------+---------------------------------------------------------+
|id   |name|age|salary|jsonCol                                                  |
+-----+----+---+------+---------------------------------------------------------+
|10001|alex|30 |75000 |{"col1":"10001","col2":"alex","col3":"30","col4":"75000"}|
|10002|bob |31 |80000 |{"col1":"10002","col2":"bob","col3":"31","col4":"80000"} |
|10003|deb |31 |80000 |{"col1":"10003","col2":"deb","col3":"31","col4":"80000"} |
|10004|john|33 |85000 |{"col1":"10004","col2":"john","col3":"33","col4":"85000"}|
|10005|sam |30 |75000 |{"col1":"10005","col2":"sam","col3":"30","col4":"75000"} |
+-----+----+---+------+---------------------------------------------------------+

我需要使用 when 函数,但要获得与 newDf1 中一样的结果,并具有实际的列名称(键)。有人可以帮我吗?


你已经使用了里面的条件struct用作列和条件列重命名为 col1 col2 ....这就是为什么你需要alias更改名称

from pyspark.sql import functions as F
newDf2 = df.withColumn("jsonCol", F.to_json(F.struct([F.when(F.col(x)!="  ",df[x]).otherwise(None).alias(x) for x in df.columns])))
newDf2.show(truncate=False)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PySpark 数据帧 to_json() 函数 的相关文章

随机推荐

  • 如何让matplotlib准确放置线条?

    默认情况下 matplotlib 绘图可能会非常不准确地放置线条 例如 请参阅附图中左端点的位置 至少有一整像素的空气是不应该存在的 事实上 我认为线中心偏离了 2 个像素 如何让matplotlib绘图准确 我不介意性能是否会受到影响 m
  • 通过成员数据在向量中搜索结构体项

    我对 C 非常陌生 我正在尝试找到一种方法来搜索结构向量以查找具有特定成员数据的结构 我知道这适用于向量中的简单类型 std find vector begin vector end item vector end 但假设我有一个这样的结构
  • 使用 JavaScript 更改标签文本

    为什么以下内容对我不起作用
  • Angular2 中的更改不会更新视图

    我已经开始探索 Angular2 我带着 Angular1 和一些 React 背景而来 但我遇到了一个问题 我想将某些击键绑定到组件中的操作 因此我决定使用 Angular2 生命周期来绑定 取消绑定操作 但是 如果我在 Mousetra
  • 如何比较两个 NSMutableArray?

    如何比较两个 NSMutableArray 如果两者相同则返回 true 否则返回 false 谢谢 return array1 isEqualToArray array2 returns YES如果数组相等 则返回NO
  • 将 matplotlib 图形嵌入到 iPython HTML 中

    我想在 Jupyter Notebook 中使用代码单元动态编写和显示 HTML 目标是生成 HTML 以我选择的某种方式显示 table div img 标签 我想捕获 img 数据并将其放置在自动生成的 HTML 中我想要的位置 到目前
  • 摆脱内联块图像下方的空间[重复]

    这个问题在这里已经有答案了 如何消除图像底部和包装器之间的空间 同时保持图像作为内联块 为什么会发生这种情况 http jsfiddle net dJVxb 2 HTML div img src https twimg0 a akamaih
  • Jquery 在按钮上打开弹出窗口,单击以进行引导

    当我点击下面的按钮时
  • 使用 Selenium IDE 访问 JavaScript 变量

    我想知道是否可以使用 Selenium 访问页面 JavaScript 变量 我有一个应用程序使用附加到窗口对象的变量 它具有全球范围 我可以通过以下方式访问它window myvar window myvar myvar this myv
  • 如何获取Azure网站中的本地文件系统路径

    我在磁盘上托管了一个文件以及我想要读取的网站 当我使用 System Environment CurrentDirectory 时 不确定如何访问该文件 它指向 D 驱动器位置 有人可以告诉我如何才能访问该文件吗 访问存储在我的网站托管位置
  • 卡夫卡主题_授权_失败

    我实际上正在努力使用 SASL 纯文本设置简单的 Kafka 身份验证并添加 ACL 授权 但当我尝试使用数据时遇到问题 main INFO org apache kafka common utils AppInfoParser Kafka
  • Pandas 使用 read_sql_table 使用过多内存

    我正在尝试将 Postgres 数据库中的表读入 Python 表大约有 800 万行和 17 列 数据库大小为 622MB 我可以使用 psql 将整个表导出到 csv 然后使用 pd read csv 读取它 它工作得很好 Python
  • Android,使用 javah 生成 jni 头文件,显示找不到 org.opencv.core.Mat 的错误

    当我用 jni 编译 java 类中的本机方法时 我只是遇到了一个恼人的问题javah生成 JNI 头文件 如果该类使用了第3方包 例如 org opencv core Mat 则javah会显示找不到 org opencv core Ma
  • 获取函数的元数

    在 Javascript 中 如何确定为函数定义的形式参数的数量 注意 这不是arguments调用函数时的参数 而是定义函数时使用的命名参数的数量 function zero Should return 0 function one x
  • 如何从Python中的url中删除scheme?

    我正在使用一个返回 url 的应用程序 用Flask 我想要URL显示给用户尽可能干净 所以我想删除http 从中 我看了看 发现了urlparse库 但找不到任何如何执行此操作的示例 最好的方法是什么 如果urlparse是不是太过分了
  • Interface Builder 中带有自动 NSNumberFormatter 的 NSTextField

    我制作 iOS 应用程序已经有一段时间了 但我正在尝试 MacOS 开发 我正在向我的 UI 添加一个 NSTextField 我注意到在 Xcode 中图形小部件中的选项之一是 NSTextField with NSNumberForma
  • Javascript DOM 树复制用于操作

    由于页面的 DOM 树是活动的并且始终反映在浏览器中 因此出于某种目的修改此 DOM 树而不影响实际渲染的树的最佳方法是什么 假设我的目的是交换某些子节点并查看 DOM 树仍然保持多么相似 创建重复树是唯一的解决方案吗 如果是的话 有没有一
  • 您必须在安全防火墙配置中使用 form_login 配置要由防火墙处理的检查路径

    我有网络服务 它是我的 常规 用户的提供者 我想为我的管理员使用 FosUserBundle 以上是我的安全配置 普通用户登录没有问题 但是当我想以管理员身份登录时 我收到以下消息 您必须在安全防火墙配置中使用 form login 配置要
  • Django 测试表没有被创建

    我正在尝试为我的 django 项目编写测试用例 但是当我运行时 manage py 测试 命令 它正在创建测试数据库 但没有创建任何表 并且我收到一个错误 表明表不存在 欢迎任何建议 这是我通过 manage pyspectdb gt m
  • PySpark 数据帧 to_json() 函数

    我有一个如下所示的数据框 gt gt gt df show 10 False id name age salary 10001 alex 30 75000 10002 bob 31 80000 10003 deb 31 80000 1000