適用於:
執行時間 18 LTS 及以上
Note
Databricks Runtime 18 比 Databricks Runtime 18.0、18.1 和 18.2 更新。 原本會以後期編號版本推出的功能,現在改為以 Databricks Runtime 18 的更新形式提供。 詳情請參見 關於統一發布說明。
重要
這項功能目前處於 公開預覽版。
將 地理 或 幾何 數值的陣列收集成單一多點、多線條、多多邊形或幾何集合。
關於對應的 Databricks SQL 函式,請參見 st_collect 函數。
Syntax
from pyspark.databricks.sql import functions as dbf
dbf.st_collect(col=<col>)
Parameters
| 參數 | 類型 | Description |
|---|---|---|
col |
pyspark.sql.Column 或 str |
一個 地理值 陣列,或幾 何 值陣列。 |
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))')]
回傳空輸入陣列的二維空幾何集合。
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)]