Заменить значения столбцов при сопоставлении ключей на карте - PullRequest
0 голосов
/ 09 января 2020

У меня есть фрейм данных со столбцом с именем source_system, в котором есть значения, содержащиеся в ключах этой карты:

val convertSourceSystem = Map (
        "HON_MUREX3FXFI"  -> "MX3_FXFI",
        "MAD_MUREX3FXFI"  -> "MX3_FXFI",
        "MEX_MUREX3FXFI"  -> "MX3_LT",
        "MX3BRASIL"       -> "MX3_BR",
        "MX3EUROPAEQ_MAD" -> "MX3_EQ",
        "MX3EUROPAEQ_POL" -> "MX3_EQ",
        "MXEUROPA_MAD"    -> "MX2_EU",
        "MXEUROPA_PT"     -> "MX2_EU",
        "MXEUROPA_UK"     -> "MX2_EU",
        "MXLATAM_CHI"     -> "MX2_LT",
        "MXLATAM_NEW"     -> "MX2_LT",
        "MXLATAM_SOV"     -> "MX2_LT",
        "POR_MUREX3FXFI"  -> "MX3_FXFI",
        "SHN_MUREX3FXFI"  -> "MX3_FXFI",
        "UK_MUREX3FXFI"   -> "MX3_FXFI",
        "SOV_MX3LATAM"    -> "MX3_LT"
    )

Мне нужно заменить их на краткий код и использовать для выполнения withColumn дает мне только нулевые значения, потому что он заменяет все значения и последнюю систему source_system не на карте:

val ssReplacedDf = irisToCreamSourceSystem.foldLeft(tempDf) { (acc, filter) =>
      acc.withColumn("source_system", when( col("source_system").equalTo(lit(filter._1)),
          lit(filter._2)))
    }

1 Ответ

2 голосов
/ 09 января 2020

Я бы предложил другое решение, присоединившись к таблице перевода:

// convert Map to a DataFrame
val convertSourceSystemDF = convertSourceSystem.toSeq.toDF("source_system","source_system_short")

tempDf.join(broadcast(convertSourceSystemDF),Seq("source_system"),"left")
  // override column with short name, alternatively use withColumnRenamed
  .withColumn("source_system",$"source_system_short")
  .drop("source_system_short)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...