tar*_*cub 4 scala apache-spark
如何将多个列对分解为多行?
我有一个包含以下内容的数据框
client, type, address, type_2, address_2
abc, home, 123 Street, business, 456 Street
Run Code Online (Sandbox Code Playgroud)
我想要一个最终的数据框,如下所示
client, type, address
abc, home, 123 Street
abc, business, 456 Street
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的代码,但它返回了 4 条记录,而不是我想要的两条记录
df
.withColumn("type", explode(array("type", "type_2")))
.withColumn("address", explode(array("address", "address_2")))
我可以使用两个单独的数据帧来执行此操作并执行联合,但我想看看是否有另一种方法可以在单个数据帧中执行此操作
谢谢
你可以使用结构来做到这一点:
df
.withColumn("str",explode(
array(
struct($"type",$"address"),
struct($"type_2".as("type"),$"address_2".as("address"))))
)
.select($"client",$"str.*")
.show()
Run Code Online (Sandbox Code Playgroud)
给出
+------+--------+----------+
|client| type| address|
+------+--------+----------+
| abc| home|123 Street|
| abc|business|456 Street|
+------+--------+----------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |