У меня есть следующий код в scala:
val fullCertificateSourceDf = certificateSourceDf
.withColumn("Stage", when(col("Data.WorkBreakdownUp1Summary").isNotNull && col("Data.WorkBreakdownUp1Summary")=!="", rtrim(regexp_extract($"Data.WorkBreakdownUp1Summary","^.*?(?= - *[a-zA-Z])",0))).otherwise(""))
.withColumn("SubSystem", when(col("Data.ProcessBreakdownSummaryList").isNotNull && col("Data.ProcessBreakdownSummaryList")=!="", regexp_extract($"Data.ProcessBreakdownSummaryList","^.*?(?= - *[a-zA-Z])",0)).otherwise(""))
.withColumn("System", when(col("Data.ProcessBreakdownUp1SummaryList").isNotNull && col("Data.ProcessBreakdownUp1SummaryList")=!="", regexp_extract($"Data.ProcessBreakdownUp1SummaryList","^.*?(?= - *[a-zA-Z])",0)).otherwise(""))
.withColumn("Facility", when(col("Data.ProcessBreakdownUp2Summary").isNotNull && col("Data.ProcessBreakdownUp2Summary")=!="", regexp_extract($"Data.ProcessBreakdownUp2Summary","^.*?(?= - *[a-zA-Z])",0)).otherwise(""))
.withColumn("Area", when(col("Data.ProcessBreakdownUp3Summary").isNotNull && col("Data.ProcessBreakdownUp3Summary")=!="", regexp_extract($"Data.ProcessBreakdownUp3Summary","^.*?(?= - *[a-zA-Z])",0)).otherwise(""))
.select("Data.ID",
"Data.CertificateID",
"Data.CertificateTag",
"Data.CertificateDescription",
"Data.WorkBreakdownUp1Summary",
"Data.ProcessBreakdownSummaryList",
"Data.ProcessBreakdownUp1SummaryList",
"Data.ProcessBreakdownUp2Summary",
"Data.ProcessBreakdownUp3Summary",
"Data.ActualStartDate",
"Data.ActualEndDate",
"Data.ApprovedDate",
"Data.CurrentState",
"DataType",
"PullDate",
"PullTime",
"Stage",
"System",
"SubSystem",
"Facility",
"Area"
)
.filter((col("Stage").isNotNull) && (length(col("Stage"))>0))
.filter(((col("SubSystem").isNotNull) && (length(col("SubSystem"))>0)) || ((col("System").isNotNull) && (length(col("System"))>0)) || ((col("Facility").isNotNull) && (length(col("Facility"))>0)) || ((col("Area").isNotNull) && (length(col("Area"))>0))
)
.select("*")
Этот фрейм данных fullCertificateSourceDf содержит следующие данные:
Я скрыл некоторые столбцы для краткости.
Я хочу, чтобы данные выглядели так:
Мы разбиваемся на два столбцы: ProcessBreakdownSummaryList и ProcessBreakdownUp1SummaryList. Они оба являются списками, разделенными запятыми.
Обратите внимание, если значения указаны в ProcessBreakdownSummaryList (CS10-100-22-10 - Система подогрева вентилятора приточного воздуха, CS10-100-81 -10 - Mine Service Switchgear) и ProcessBreakdownUp1SummaryList (CS10-100-22 - вентиляция сервисного вала, CS10-100-81 - сервисный вал электрооборудования) - это то же самое, что мы должны разделить только один раз.
Однако, если они отличаются, как в ProcessBreakdownSummaryList (CS10-100-22-10 - Система подогрева вентилятора приточного воздуха, CS10-100-81 -10 - Распределительное устройство Mine Services) и ProcessBreakdownUp1SummaryList (CS10-100-22 - вентиляция сервисного вала, CS10-100-34 - электрооборудование сервисного вала) он должен снова разделиться на третий ряд.
Заранее благодарим за помощь с этим.