st_collect

适用于:检查标记为“是”的 Databricks Runtime 18 LTS 及更高版本

Important

此功能目前以公共预览版提供。

GeographyGeometry 值的数组收集到单个多点、多行字符串、多多边形或几何图形集合中。

有关相应的 Databricks SQL 函数,请参阅 st_collect 函数

Syntax

from pyspark.databricks.sql import functions as dbf

dbf.st_collect(col=<col>)

Parameters

参数 类型 说明
col pyspark.sql.Columnstr Geography 值的数组,或 Geometry 值的数组。

Returns

pyspark.sql.Column地理几何 图形值,表示多点、多线字符串、多多边形或几何图形集合。

None将忽略输入数组中的任何值。 输出的类型取决于非None 输入几何图形的类型:

  • 如果所有非None 元素都是点,则返回一个多点。
  • 如果所有非None 元素都是线字符串,则返回多行字符串。
  • 如果所有非None 元素都是多边形,则返回一个多多边形。
  • 否则,返回几何图形集合。

每个输出包含每个非None 数组元素的一个元素。

多类型输入(多点、多线字符串、多多边形)和几何图形集合输入作为生成的几何集合的元素保留:他们不是平展的。

输出的 SRID 值是非None 输入几何图形的常见 SRID 值。

输出的维度是非None 输入几何图形的最大通用维度。

如果输入数组为空或仅 None 包含值,则返回 2D 空几何图形集合。 在这种情况下,输出的 SRID 将按如下方式确定:

  • 如果输入数组的元素类型为 GEOGRAPHY(ANY),则输出的 SRID 为 4326
  • 如果输入数组的元素类型为 GEOMETRY(ANY),则输出的 SRID 为 0
  • 否则,输出的 SRID 是输入数组的元素类型的 SRID。

如果任一两个非None 输入几何图形具有不同的 SRID 值,该函数将引发 ST_DIFFERENT_SRID_VALUES 错误。

如果输入为 None.,则函数返回 None

示例

将点数组收集到多点中。

from pyspark.databricks.sql import functions as dbf
from pyspark.sql import functions as sf
df = spark.createDataFrame([('POINT(1 2)', 'POINT(3 4)')], ['wkt1', 'wkt2'])
df.select(dbf.st_astext(dbf.st_collect(sf.array(dbf.st_geomfromtext('wkt1'), dbf.st_geomfromtext('wkt2')))).alias('result')).collect()
[Row(result='MULTIPOINT((1 2),(3 4))')]

将多边形数组收集到多多边形中。

from pyspark.databricks.sql import functions as dbf
from pyspark.sql import functions as sf
df = spark.createDataFrame([('POLYGON((0 0,10 0,10 10,0 10,0 0))',)], ['wkt'])
df.select(dbf.st_astext(dbf.st_collect(sf.array(dbf.st_geomfromtext('wkt')))).alias('result')).collect()
[Row(result='MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))')]

将混合几何类型的数组收集到几何图形集合中。

from pyspark.databricks.sql import functions as dbf
from pyspark.sql import functions as sf
df = spark.createDataFrame([('POLYGON((0 0,10 0,10 10,0 10,0 0))', 'LINESTRING(1 2,3 4)')], ['wkt1', 'wkt2'])
df.select(dbf.st_astext(dbf.st_collect(sf.array(dbf.st_geomfromtext('wkt1'), dbf.st_geomfromtext('wkt2')))).alias('result')).collect()
[Row(result='GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),LINESTRING(1 2,3 4))')]

返回空输入数组的 2D 空几何图形集合。

from pyspark.databricks.sql import functions as dbf
from pyspark.sql import functions as sf
df = spark.range(1)
df.select(dbf.st_astext(dbf.st_collect(sf.array())).alias('result')).collect()
[Row(result='GEOMETRYCOLLECTION EMPTY')]

返回 None 输入 None

from pyspark.databricks.sql import functions as dbf
from pyspark.sql import functions as sf
df = spark.range(1)
df.select(dbf.st_collect(sf.lit(None)).alias('result')).collect()
[Row(result=None)]