使用Spark统计全国县的面积

    1、软件环境

         操作系统为ubuntu 20,spark版本为3.0.1,python版本为3.8,spark安装在本机上,python安装pyspark模块

    2、矢量数据

       矢量数据为下载的全国县shp数据

    

 

3、代码

   1、首先,使用python读取shp,生成几何信息的wkt串文本文件   

from osgeo import gdal
from osgeo import ogr

strPath = "/home/linjx/Desktop/data/gis/vector/test/county.shp"
ds = ogr.Open(strPath, False)
layer = ds.GetLayer(0)

spRef = layer.GetSpatialRef()
wkt = spRef.ExportToWkt()
f = open("/home/linjx/Desktop/spwkt.txt", "w")
f.write(wkt)
f.close()

feature = layer.GetNextFeature()
i = 0
f = open("/home/linjx/Desktop/geowkts.txt", "w")
while feature != None :
    geo = feature.GetGeometryRef()
    wkt = geo.ExportToWkt()
    f.write(wkt)
    f.write("\n")
    i+=1
    print("%d" % i)
    feature = layer.GetNextFeature()
f.close()

print("Done")

 

2、编写spark任务脚本

from osgeo import gdal
from osgeo import ogr
from osgeo import osr
from pyspark import SparkConf, SparkContext

def calcArea(strWkt : str) -> float:
    geo = ogr.CreateGeometryFromWkt(strWkt)
    return geo.Area()

conf = SparkConf().setMaster("local").setAppName("geo")
sc = SparkContext(conf = conf)

wktRDD = sc.textFile("/home/linjx/Desktop/geowkts.txt")
areaRDD = wktRDD.map(calcArea)
sumArea = areaRDD.reduce(lambda x, y: x+y)
sumArea = sumArea / 1000 / 1000  

print("Area = %.9f" %sumArea)

 

4、执行spark脚本

    1、直接运行python脚本

 

2、使用spark-submit提交

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值