#sql #scala #apache-spark #apache-spark-dataset
Вопрос:
Я пытаюсь из набора данных создать строку из существующих столбцов. Вот мой случай:
Набор входных данных
учетная запись | платежный счет | счет по счету | дата начала | дата окончания |
---|---|---|---|---|
0011t00000MY1U3AAL | 0011t00000MY1U3XXX | 0011t00000ZZ1U3AAL | 2020-06-10 00:00:00.000000 | нулевой |
И я хотел бы иметь что-нибудь подобное этому
учетная запись | дата начала | дата окончания |
---|---|---|
0011t00000MY1U3AAL | 2021-06-10 00:00:00.000000 | нулевой |
0011t00000MY1U3XXX | 2021-06-10 00:00:00.000000 | нулевой |
0011t00000ZZ1U3AAL | 2021-06-10 00:00:00.000000 | нулевой |
Во входном наборе данных столбцы billedaccounid и payingaccounid теперь также находятся в столбце accountid.
Заранее спасибо.
Ответ №1:
Вы можете создать столбец массива с 3 столбцами идентификаторов, а затем использовать функцию разнесения для получения желаемого результата.
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 |
------------------ -------------------------- ------- */