我的数据框包含国家/地区名称的缩写:
Dense
我还有一个枚举,包含国家名称和缩写:
+--+----+
|Id|Code|
+--+----+
|1 |FR |
|2 |FR |
|3 |FR |
|4 |Es |
|5 |Es |
|6 |Es |
|7 |IT |
+--+----+
所以我想用适当的名称映射每个缩写,我知道我可以使用 when 函数,但是我想知道是否有更好的方法,例如map函数(那个map每个字符串都互相关联)
我的数据框包含国家/地区名称的缩写:
Dense
我还有一个枚举,包含国家名称和缩写:
+--+----+
|Id|Code|
+--+----+
|1 |FR |
|2 |FR |
|3 |FR |
|4 |Es |
|5 |Es |
|6 |Es |
|7 |IT |
+--+----+
所以我想用适当的名称映射每个缩写,我知道我可以使用 when 函数,但是我想知道是否有更好的方法,例如map函数(那个map每个字符串都互相关联)
我认为最简单的方法是为地图创建一个数据框,然后在两个表之间进行联接。
,您可以创建如下所示的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
}