создание строк из столбцов в наборе данных apache spark

#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   |
 ------------------ -------------------------- -------  */