Pular para o conteúdo principal

st_collect

Aplica-se a: Verificado como sim Databricks Runtime 18 LTS e acima

info

Visualização

Esse recurso está em Prévia Pública.

Agrupa um conjunto de valores Geography ou Geometry em um único multiponto, multilinestring, multipolygon ou coleção de geometria.

Para a função correspondente do Databricks SQL, consulte a st_collect função.

Sintaxe

Python
from pyspark.databricks.sql import functions as dbf

dbf.st_collect(col=<col>)

Parâmetros

Parâmetro

Tipo

Descrição

col

pyspark.sql.Column ou str

Uma matriz de valores de Geografia ou uma matriz de valores de Geometria.

Devolve

pyspark.sql.Column: Um valor de Geografia ou Geometria, que representa um multiponto, multilinestring, multipolígono ou uma coleção de geometrias.

Quaisquer valores de None na matriz de entrada são ignorados. O tipo de saída depende dos tipos das geometrias de entrada não-None:

  • Se todos os elementos que não sãoNone forem pontos, retorna um multiponto.
  • Se todos os elementos não-None forem linestrings, retorna uma multilinestring.
  • Se todos os elementos não-None forem polígonos, retorna um multipolígono.
  • Caso contrário, retorna uma coleção de geometria.

Cada saída contém um elemento para cada elemento do array que não sejaNone.

Entradas de vários tipos (multipoint, multilinestring, multipolygon) e entradas de coleção de geometria são preservadas como elementos da coleção de geometria resultante; elas não são achatadas.

O valor SRID da saída é o valor SRID comum das geometrias de entrada não-None.

A dimensão da saída é a dimensão comum máxima das geometrias de entrada não-None.

Se a matriz de entrada estiver vazia ou contiver apenas valores None, a coleção de geometria vazia 2D será retornada. Nesse caso, o SRID da saída é determinado da seguinte forma:

  • Se o tipo de elemento da matriz de entrada for GEOGRAPHY(ANY), o SRID da saída será 4326.
  • Se o tipo de elemento da matriz de entrada for GEOMETRY(ANY), o SRID da saída será 0.
  • Caso contrário, o SRID da saída é o do tipo de elemento do array de entrada.

Se quaisquer duas geometrias de entrada não-None tiverem valores SRID diferentes, a função gerará um erro ST_DIFFERENT_SRID_VALUES.

A função retorna None se a entrada for None.

Exemplos

Coleta-se uma matriz de pontos em um multiponto.

Python
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()
Output
[Row(result='MULTIPOINT((1 2),(3 4))')]

Reúne uma matriz de polígonos em um multipolígono.

Python
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()
Output
[Row(result='MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))')]

Agrupa uma matriz de tipos de geometria mistos em uma coleção de geometrias.

Python
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()
Output
[Row(result='GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),LINESTRING(1 2,3 4))')]

Retorna a coleção de geometria 2D vazia para uma matriz de entrada vazia.

Python
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()
Output
[Row(result='GEOMETRYCOLLECTION EMPTY')]

Retorna None para uma entrada None.

Python
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()
Output
[Row(result=None)]