【问题标题】: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   |
    +------------------+--------------------------+-------+ */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      相关资源
      最近更新 更多