gpt4 book ai didi

apache-spark - 将源配置单元表的多列数据复制到不同行的目标配置单元表的单列

转载 作者:行者123 更新时间:2023-12-04 04:59:57 25 4
gpt4 key购买 nike

我需要将数据从一个 Hive 源表复制到另一个目标表。下面是带有示例数据的源表结构:

source_table
Userid Name Phone1 Phone2 Phone3 Address1 Address2 Address3
123 Jitu 123456 987654 111111 DELHI GURGAON NOIDA
234 Mark 123456 987654 111111 UK USA IND

在将数据从源复制到目标时,我的要求是拥有 Phone1、Phone2、Phone3 以及相应的 Address1、Address2 和 Address3目标表中单个列中的列。以下是数据在目标表中的样子:

Target_table
Userid Name Phone_no Address
123 Jitu 123456 DELHI
123 Jitu 987654 GURGAON
123 Jitu 111111 NOIDA
234 Mark 123456 UK
234 Mark 987654 USA
234 Mark 111111 IND

我知道最简单的方法是对源表中的每个电话和地址列多次插入目标表使用配置单元查询语言或 Spark 数据帧。

我可以使用任何其他有效的方法来实现这一目标。

最佳答案

可以多次选择原始dataframe,对于每个列索引,然后将选择的dataframe通过“union”合并为一个:

val df = Seq(
(123, "Jitu", "123456", "987654", "111111", "DELHI", "GURGAON", "NOIDA"),
(234, "Mark", "123456", "987654", "111111", "UK", "USA", "IND")
).toDF(
"Userid", "Name", "Phone1", "Phone2", "Phone3", "Address1", "Address2", "Address3"
)

val columnIndexes = Seq(1, 2, 3)
val onlyOneIndexDfs = columnIndexes.map(idx =>
df.select(
$"Userid",
$"Name",
col(s"Phone$idx").alias("Phone_no"),
col(s"Address$idx").alias("Address")))

val result = onlyOneIndexDfs.reduce(_ union _)

输出:

+------+----+--------+-------+
|Userid|Name|Phone_no|Address|
+------+----+--------+-------+
|123 |Jitu|123456 |DELHI |
|123 |Jitu|111111 |NOIDA |
|123 |Jitu|987654 |GURGAON|
|234 |Mark|123456 |UK |
|234 |Mark|987654 |USA |
|234 |Mark|111111 |IND |
+------+----+--------+-------+

关于apache-spark - 将源配置单元表的多列数据复制到不同行的目标配置单元表的单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56356942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com