首页 > 解决方案 > Scala中yield语句中的展平数组

问题描述

我有以下一段代码

var splitDf = fullCertificateSourceDf.map(row => {
  val ID = row.getAs[String]("ID")
  val CertificateID = row.getAs[String]("CertificateID")
  val CertificateTag = row.getAs[String]("CertificateTag")
  val CertificateDescription = row.getAs[String]("CertificateDescription")
  val WorkBreakdownUp1Summary = row.getAs[String]("WorkBreakdownUp1Summary")
  val ProcessBreakdownSummaryList = row.getAs[String]("ProcessBreakdownSummaryList")
  val ProcessBreakdownUp1SummaryList = row.getAs[String]("ProcessBreakdownUp1SummaryList")
  val ProcessBreakdownUp2Summary = row.getAs[String]("ProcessBreakdownUp2Summary")
  val ProcessBreakdownUp3Summary = row.getAs[String]("ProcessBreakdownUp3Summary")
  val ActualStartDate = row.getAs[java.sql.Date]("ActualStartDate")
  val ActualEndDate = row.getAs[java.sql.Date]("ActualEndDate")
  val ApprovedDate = row.getAs[java.sql.Date]("ApprovedDate")
  val CurrentState = row.getAs[String]("CurrentState")
  val DataType = row.getAs[String]("DataType")
  val PullDate = row.getAs[String]("PullDate")
  val PullTime = row.getAs[String]("PullTime")

  val split_ProcessBreakdownSummaryList = ProcessBreakdownSummaryList.split(",")
  val split_ProcessBreakdownUp1SummaryList = ProcessBreakdownUp1SummaryList.split(",")

  val Pattern = "^.*?(?= - *[a-zA-Z])".r

  for{
        subSystem : String <- split_ProcessBreakdownSummaryList
      } yield(ID,
              CertificateID,
              CertificateTag,
              CertificateDescription,
              WorkBreakdownUp1Summary,
              subSystem,
              for{ system: String <- split_ProcessBreakdownUp1SummaryList if(system contains subSystem.trim().substring(0,11))}yield(system),
              ProcessBreakdownUp2Summary,
              ProcessBreakdownUp3Summary,
              ActualStartDate,
              ActualEndDate,
              ApprovedDate,
              CurrentState,
              DataType,
              PullDate,
              PullTime
             )
}).flatMap(identity(_))

display(splitDf)

如何从上述语句的以下部分获取第一个匹配元素:

for{ system: String <- split_ProcessBreakdownUp1SummaryList if(system contains subSystem.trim().substring(0,11))}yield(system)

目前它返回一个包含一个元素的数组。我不想要数组我只想要元素。

先感谢您。

标签: scalaazure-databricks

解决方案


推荐阅读