Spark系列 —— 將Dataframe轉化成HashMap

既然是要將Dataframe轉化成HashMap, 那麼爲什麼要把Dataframe轉化成HashMap? 使用場景是什麼?

需求

現在有一個json串"{‘address’:[[‘33’,‘3301’,‘330108’],‘xx路xx號’]}", 需要把address解析出來之後, 將行政區劃編碼替換爲對應的省市區縣, 最後輸出這樣的格式(“浙江省杭州市濱江區xx路xx號”).

開發給到的行政區劃表(area)的結構如下圖:
在這裏插入圖片描述
因爲行政區劃表在解析json的時候, 很多地方都會用到, 並且行政區劃表本身記錄數比較少, 佔用的內存空間較小, 就考慮將行政區劃編碼和對應的省市區縣放到一個HashMap中, 查詢效率也會比較高.

有的同學可能會問, 爲什麼不用join? 如果用join關聯, 在查省、市、區縣時,要麼是先過濾出三個Dataframe,分別代表省、市、區縣,然後再分別join,要麼就是不區分,關聯整個行政區劃表3次。這樣一來,不僅比較麻煩,效率也不高。

 
下面看具體代碼實現

import scala.collection.mutable

val hashMap = spark.read.table("ods.area") //行政區劃表
	.select("area_code", "area_name") //只查詢需要的字段(行政區劃編碼、省市區縣名稱)
	.rdd //Dataframe轉化爲RDD
	//RDD中每一行轉化成area_code和area_name映射的key-value
	.map(row => row.getAs("area_code").toString -> row.getAs("area_name").toString) 
	.collectAsMap() //將key-value對類型的RDD轉化成Map
	.asInstanceOf[mutable.HashMap[String, String]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章