如何在Spark中更新dataFrame列的值

我的数据框包含国家/地区名称的缩写:

Dense

我还有一个枚举,包含国家名称和缩写:

+--+----+
|Id|Code|
+--+----+
|1 |FR  |
|2 |FR  |
|3 |FR  |
|4 |Es  |
|5 |Es  |
|6 |Es  |
|7 |IT  |
+--+----+

所以我想用适当的名称映射每个缩写,我知道我可以使用 when 函数,但是我想知道是否有更好的方法,例如map函数(那个map每个字符串都互相关联)

haximu 回答:如何在Spark中更新dataFrame列的值

我认为最简单的方法是为地图创建一个数据框,然后在两个表之间进行联接。

,

您可以创建如下所示的scala Map:

object Countries extends Enumeration {
    type Countries=Mapping
    case class Mapping(abr:String,value:String) extends Val
    val FR=Mapping("FR","France")
    val ES=Mapping("ES","Spain")
    val IT=Mapping("IT","ITALY")
    val map: Map[String,String] = List(FR,ES,IT).map(mapping => (mapping.abr -> mapping.value)).toMap
  }

现在map包含必需的映射。 接下来要做的是遍历数据框,我们可以使用创建的地图使用国家/地区代码获取国家/地区名称:

object Application extends App {
  //create spark session and dataframe here

  val countryMapping = Countries.map
  val dataSet = df.as[(String,String)] //convert to dataSet for iteration with type safety
  val resultDS = dataSet.map{ case (id,code) => (id,countryMapping.get(code))}
  val resultDF = resultDS.toDF("Id","Country") //convert back to dataframe

  resultDF.show
}
本文链接:https://www.f2er.com/3158222.html

大家都在问