PolarDB是阿里巴巴自主研发的下一代关系型分布式云原生数据库。阿里云自研Ganos时空引擎提供一系列的数据类型、函数和存储过程,用于在云原生关系型分布式数据库PolarDB中对空间/时空数据进行高效的存储、索引、查询和分析计算。DLA Ganos兼容PolarDB Ganos数据访问接口,可直接加载PolarDB Ganos中的矢量数据。

本文以全球船舶轨迹AIS数据集为例,展示如何利用DLA Ganos加载PolarDB Ganos中的矢量数据。

  1. 始化Spark环境:
    //初始化SparkSession
    val spark = SparkSession.builder
        .appName("Simple Application")
        .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
        .config("spark.sql.crossJoin.enabled", "true")
        .config("spark.kryo.registrator", classOf[GanosSparkKryoRegistrator].getName)
        .getOrCreate()
    import spark.implicits._
    
    //SparkSession加载JTS包用于处理时空数据
    spark.withJTS 
    val sc = spark.sparkContext
  2. 加载数据:
    1. Spark format方式:
      //配置链接参数
        val dsParams: JMap[String, String] = Map(
          "host" -> "PolarDB URL地址",
          "polardb.ganos" -> "true",
          "dbtype"->"polardb", 
          "port"->"PolarDB接口",
          "schema"->"public",
          "database"->"数据库名称",
          "user"->"用户名",
          "passwd"->"密码")
      
      //加载AIS数据源
      df = spark.read.format("ganos-geometry")
            .options(dsParams)
            .option("ganos.feature", "AIS")
            .load()
      df.show
    2. Spark DataFrame API方式:
      val layer=spark.read.ganos.polardbGeometry(dsParams)
      layer.show
  3. 输出结果:1