【问题标题】:create rows from columns in a apache spark dataset从 apache spark 数据集中的列创建行
【发布时间】:2023-03-08 20:45:01
【问题描述】:
我正在尝试从数据集中从现有列创建一行。
这是我的情况:
输入数据集
| accountid |
payingaccountid |
billedaccountid |
startdate |
enddate |
| 0011t00000MY1U3AAL |
0011t00000MY1U3XXX |
0011t00000ZZ1U3AAL |
2020-06-10 00:00:00.000000 |
NULL |
我想要这样的东西
| accountid |
startdate |
enddate |
| 0011t00000MY1U3AAL |
2021-06-10 00:00:00.000000 |
NULL |
| 0011t00000MY1U3XXX |
2021-06-10 00:00:00.000000 |
NULL |
| 0011t00000ZZ1U3AAL |
2021-06-10 00:00:00.000000 |
NULL |
在输入数据集中, billedaccounid 和 payaccounid 列现在也在 accountid 列中。
提前谢谢你。
【问题讨论】:
标签:
sql
scala
apache-spark
apache-spark-dataset
【解决方案1】:
您可以创建一个包含 3 个 id 列的数组列,然后使用explode 函数来获得所需的结果。
val spark = SparkSession.builder().master("local[*]").getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
import spark.implicits._
val df = List(("0011t00000MY1U3AAL", "0011t00000MY1U3XXX", "0011t00000ZZ1U3AAL", "2020-06-10 00:00:00.000000", "NULL"))
.toDF("accountid", "payingaccountid", "billedaccountid", "startdate", "enddate")
df.select(
explode_outer(array("accountid","payingaccountid","billedaccountid")).as("accountid"),
'startdate,'enddate).show(false)
/*
+------------------+--------------------------+-------+
|accountid |startdate |enddate|
+------------------+--------------------------+-------+
|0011t00000MY1U3AAL|2020-06-10 00:00:00.000000|NULL |
|0011t00000MY1U3XXX|2020-06-10 00:00:00.000000|NULL |
|0011t00000ZZ1U3AAL|2020-06-10 00:00:00.000000|NULL |
+------------------+--------------------------+-------+ */