st_collect

適用於:勾選已標記為 Databricks 執行時間 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)]