json解析 spark_PySpark算子处理空间数据全解析(8):构造空间数据的RDD(2)

上一篇讲了如何把空间数据变成文本数据,这一节我们来看看如何用PySpark原生的接口,来获取文本数据构造空间要素RDD

(有问就想用Spark直接用分布式的方式读取Shapefile的同学,出门右转,ArcGIS Geoanalytics Server去了解一下,而不想用ArcGIS的去了解一下newAPIHadoopFile以及Hadoop的inputFormatClass)

67fefb2a4806707e9e2031a725ce300f.png

如果真心想了解上面三个的,有偿私聊……免费的,请继续往下看。

如果数据已经处理成了GeoJSON或者csv\tsv格式的文本数据,那么就可以直接利用PySpark的默认接口进行分布式读取了。

读取完成之后,利用各种算子完成数据构造流程如下:

148dba9da70848db742251b68217fcf3.png

下面做一个简单的例子:

68f14e7720cd39137f6825d91e8e5869.png

点数据的构造非常的简单,所以只需要获取到xy坐标,就可以直接构建了,那么通过filter算子,可以做一轮验证,把无法构建成点的数据都过滤掉(比如表头,比如中间有错误的)。

面数据如何构造呢?来看下面的例子:

9bffdbdd00948366c3629ab7bb9ea6e2.png

tsv的构造模式,与csv构造点数据是一模一样的,只需要读进去每一行,后按照是否能够构建成geomatry要素进行清洗,就可以可以了,可见tsv对于空间数据是文本化模式的绝配。

如果是GeoJSON怎么办呢?我们先来看看GeoJSON文件的结构:

055426c6932c23f3ff3636e2c8f7247d.png

GeoJSON文件有这个一个问题,就是面5行都是都是描述性的信息,那么就可以把前面5行都当成tsv/csv里面的表头来处理,把他们都过滤掉。

然后每行都是一个JSON行,这样就可以进行解析了,但是在看看最后:

dc97d19104e180badc34c2226685cd6f.png

每行的结尾,都有一个逗号……这样如果直接读入Json的话,百分之百会报错,那么怎么办呢?有同学说,这还不容易,直接去掉最后一个逗号就行,但是我们来看看最后一行:

e13f3f8fd1dfcbea033a34a3d1eb0484.png

最后一条记录,结尾没有逗号,所以要处理GeoJSON,需要处理以下内容:

1、开头描述信息的5行

2、过滤掉结尾的几行封闭符号

3、除去最后一行以外,每行末尾的逗号

示例代码如下:

9abc2927d4523b6eda498dca32664ae5.png

最后总结一下,文本构造几何RDD的流程如下

第一种,序列化对象转换模式:

c8b031feb52053555f427de7bfe85fd2.png

第二种:文本模式:

399262a48742d51cb3d9ecc0ad8ca182.png

待续未完

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值