适用于:
Databricks Runtime 18 LTS 及更高版本
Important
此功能目前以公共预览版提供。
将 Geography 或 Geometry 值的数组收集到单个多点、多行字符串、多多边形或几何图形集合中。
有关相应的 Databricks SQL 函数,请参阅 st_collect 函数。
Syntax
from pyspark.databricks.sql import functions as dbf
dbf.st_collect(col=<col>)
Parameters
| 参数 | 类型 | 说明 |
|---|---|---|
col |
pyspark.sql.Column 或 str |
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)]