数仓项目中geohash字典的构建(下)

数仓项目中geohash字典的构建(下)

剩下将经纬转成geohash码mysql弄不了只能用spark了
/**
*

  • 将sql中写好的经纬度字段在spark中生成geohash编码
  • 预备:在子模块中传入geohash的依赖
  • 1.读取mysql中geohasg/tmp 表格
  • 2.使用GeoHash.geoHashStringWithCharacterPrecision(lat,lng,5)算法转换
  • 3.保存结果
  • 4.关流
    */
object dict {
  def main(args: Array[String]): Unit = {
    //构造spark(创建一个spark会话)
    val spark: SparkSession = SparkSession.builder()
      .appName(this.getClass.getSimpleName)
      .master("local[*]")
      .getOrCreate()
import spark.implicits._
    //读取mysql
    //new 一个mysql性能
    val pro = new Properties()
    pro.setProperty("user","root")
    pro.setProperty("password","123456")
    //jdbc参数(地址,表名,属性)
    val df: DataFrame = spark.read.jdbc("jdbc:mysql://doit01:3306/mysql","tmp",pro)

    //转整geohash编码
    //最后再用var res接收一下!
    var res =df.map(row=>{

      //取出这一行的经纬度
      val lng: Double = row.getAs[Double]("lng")
      val lat: Double = row.getAs[Double]("lat")
      val province: String = row.getAs[String]("province")
      val city: String = row.getAs[String]("city")
      val district: String = row.getAs[String]("district")

      //调用算法(最长的那个方法)
    val geohash: String = GeoHash.geoHashStringWithCharacterPrecision(lat,lng,5)
      //组装返回结果
      (geohash,province,city,district)
    }).toDF("gro","province","city","district")

    //保存结果
    res.write.parquet("data/dict/geo_dict/output")


    spark.stop()
  }
}

注意:在这个编译的过程中可能会有两个报错
1.NoSuchMethodError
找不到这个方法错误
多为版本冲突导致的
2.No suitable driver
没有合适的驱动
少一个依赖或者少一个jar包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值