首页 / 浏览问题 / 组件GIS / 问题详情
spark组件加载Oracle数据库中的空间数据
16EXP 2023年06月15日
spark组件加载Oracle数据库中的空间数据

加载结果中,空间字段的值为:oracle. sql.STRUCT@67b001f4

这很明显不是空间数据

该如何正确加载为空间数据

1个回答

空间的字段值是二进制,你打印出来的就是二进制对象地址,未进行二进制对象进行序列化。

以超图的OraclePlus数据源里的空间数据读取,将空间要素序列化打印,如下代码示例:

val params = new java.util.HashMap[String, java.io.Serializable]()
params.put(SDXFeatureRDDProviderParams.DBType.key, "OraclePlus")
params.put(SDXFeatureRDDProviderParams.Server.key, "127.0.0.1:1521/orcl")
params.put(SDXFeatureRDDProviderParams.User.key, "c##mytest")
params.put(SDXFeatureRDDProviderParams.PassWord.key, "supermap")
params.put(FeatureRDDProviderParams.ProviderType.key, "sdx")
val sdx = new SDXFeatureRDDProvider()
val rdd = sdx.rdd(new Configuration(), ss.sparkContext, params, new Query("NewPoint"))
println(rdd.first()) //打印第一个要素,内部会自动序列化空间对象
1,510EXP 2023年06月16日
有上可知,自动化序列对象发生在println(rdd.first()),怎样才能将数据读取为FRDD的时候,对空间字段的数据进行序列化,即读取出的FRDD数据已经是序列化过后的数据
只有在数据读取出来为FeatureRDD之后,对feature进行打印输出,才会自动序列化。否则只能自己调geotools相关接口对feature转json。
在测试过程中,我发现有的数据读取出来是二进制对象地址,有的数据是正确的空间数据格式。请问是什么会导致空间数据被读取为二进制对象地址。是因为存储的空间数据是二进制的嘛
...