簡體   English   中英

spark scala:添加一個以列表為值的新列; 該列表應驗證特定條件

[英]spark scala: add a new column that has a list as a value; the list should verify a specific condition

我有以下查詢:

finvResultOutput1
      .withColumn("offersAtSite",when(col("activeIOsAtSite")==="Y",
        finvResultOutput1.select(col("OfferSpecification_displayLabel"),col("Site_siteId").alias("siteid"))
          .where(col("Site_siteId")===col("siteid"))
          .drop("siteid")
          .collect()
      ))

我想在我的數據框中添加一個名為offersAtSite的新列,當另一個名為activeIOsAtSite列等於"Y"時,應該添加此列。

這個新列的值應該是一個列表,沒有重復列OfferSpecification_displayLabel的元素,其中Site_siteId等於我們正在迭代的行的當前Site_siteId

誰能給我一個更好的方法來做到這一點,因為我所做的查詢花費了太多時間,我不知道它是否有效

貝婁是我想要實現的一個例子:

在此處輸入圖像描述

首先,您可以在主表上進行groupBy然后collect_set (集合不包含重復項):

val grouped = df.groupBy("Site_siteId").agg(collect_set("OfferSpecifications_displayLabel").as("offerAtSite"))

我們得到:

+-----------+------------------------+
|Site_siteId|offerAtSite             |
+-----------+------------------------+
|site_id_3  |[site3_DL_1, site3_DL_2]|
|site_id_4  |[site4_DL_1]            |
|site_id_2  |[site2_DL_1]            |
|site_id_1  |[site1_DL_1, site1_DL_2]|
+-----------+------------------------+

然后,我們將我們的df表加入grouped並覆蓋offerAtSite以僅具有Y值的值:

df.join(grouped, Seq("Site_siteId"), "left")
  .withColumn("offerAtSite", when(col("activeIOsAtSite").equalTo("Y"), col("offerAtSite")))

最后結果:

+-----------+---------------+--------------------------------+------------------------+
|Site_siteId|activeIOsAtSite|OfferSpecifications_displayLabel|offerAtSite             |
+-----------+---------------+--------------------------------+------------------------+
|site_id_3  |Y              |site3_DL_1                      |[site3_DL_1, site3_DL_2]|
|site_id_3  |Y              |site3_DL_2                      |[site3_DL_1, site3_DL_2]|
|site_id_4  |N              |site4_DL_1                      |null                    |
|site_id_2  |N              |site2_DL_1                      |null                    |
|site_id_1  |Y              |site1_DL_1                      |[site1_DL_1, site1_DL_2]|
|site_id_1  |Y              |site1_DL_2                      |[site1_DL_1, site1_DL_2]|
+-----------+---------------+--------------------------------+------------------------+

這應該會更好,祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM