Scala Spark Geospatial Intersection

时间:2018-04-13 12:57:06

标签: scala apache-spark spark-dataframe

我有一个带架构的数据框折线:

|-- Polyline_id: string (nullable = false)
|-- latitude: double(nullable = true)
|-- longitude: double(nullable = true)
|-- point_index: integer(nullable = true)

折线包含每个元素的多行' Polyline_id'。

数据框带有架构的细分:

|-- Segments_id: string (nullable = false)
|-- latitudeStart: double(nullable = true)
|-- longitudeStart: double(nullable = true)
|-- latitudeEnd: double(nullable = true)
|-- longitudeEnd: double(nullable = true)

细分仅包含每个元素的一行' Segments_id'

我想生成一个新数据框,其中包含所有' Segments_id',' Polyline_id'与该段相交的

一种解决方案是从数据帧Polyline生成SegmentsFromPoly的新数据帧,并通过UDF比较SegmentsFromPoly的所有段和来自Segments的段。

我正在寻找一种更简单,更有效的方法(如果确实存在!)。

样本数据:

折线:

"poly_id_1",25.254,55.400,1
"poly_id_1",25.258,55.394,2
"poly_id_1",25.261,55.390,3
"poly_id_2",25.284,55.450,1
"poly_id_2",25.298,55.392,2
"poly_id_2",25.305,55.300,3

细分:

"seg_id_1",25.253,55.405,25.280,55.380
"seg_id_2",25.993,55.405,25.549,55.941
"seg_id_3",25.237,55.489,25.357,55.785
"seg_id_4",25.894,55.719,25.197,55.354

输出:

"seg_id_1",[a poly_id]
"seg_id_1",[a poly_id]
"seg_id_2",[a poly_id]
"seg_id_3",[a poly_id]
"seg_id_3",[a poly_id]
"seg_id_4",[a poly_id]
"seg_id_4",[a poly_id]

1 个答案:

答案 0 :(得分:0)

您可以使用Magellan spatial joins来支持geohash indexer

为了使其有效,您必须包含该包并注入Magellan优化规则。有关详细信息,请按the documentation