apache-spark - 在 Spark Dataframe 中交换列值,其中一个是字符串,另一个是结构内的字符串
问题描述
我在数据框中有如下数据
{"A", {4,"B"}}
架构:
{"type":"struct","fields":[{"name":"lastname","nullable":false,"type":"string","metadata":{}},{"name":"name","type":{"type":"struct","fields":[{"name":"mid","type":"long","nullable":true,"metadata":{}},{"name":"firstname","type":"string","nullable":true,"metadata":{}}]},"nullable":true,"metadata":{}}]}
我想交换值“A”和“B”,以便输出如下所示
{"B", {4,"A"}}
我们可以在不使用 map 之类的函数的情况下实现这一点吗?在Java中可以用withColumn、select来实现吗?我想避免使用任何行级操作,例如 map,因为我们需要将编码器传递给这些函数,并且由于某些限制,我无法传递编码器。
df.show()
+--------+------+
|lastname| name|
+--------+------+
| A|[4, B]|
| C|[5, D]|
+--------+------+
df.printSchema()
root
|-- lastname: string (nullable = false)
|-- name: struct (nullable = true)
| |-- mid: long (nullable = true)
| |-- firstname: string (nullable = true)
解决方案
您可以简单地使用select
和struct
如下
df.select($"name.firstName".as("lastName"),
struct("name.mid", "lastName").as("name")
).show(false)
输出:
+--------+------+
|lastName|name |
+--------+------+
|B |{4, A}|
|D |{5, C}|
+--------+------+
推荐阅读
- sql - 同一函数之间的 PL/pgSQL 死锁
- php - 我在我的服务器上发现了恶意 PHP 脚本
- ruby-on-rails - 根据 Ruby 中收到的命令调用函数
- node.js - 如何在续集中区分字段状态?
- typescript - 如何在电容器的电子构建中使用 opencv.js?ReferenceError:未定义 cv
- php - 使用 php 在编辑页面中编辑不显示 youtube 链接的记录
- c++ - Qt QRadioButton setChecked
- android - 如何在 Android 中模拟 DateFormat.is24HourFormat() 进行单元测试?
- sql - SQL 语句总和不能达到 100%
- r - 使用正则表达式从R中的字符串中提取数字