st_collect

Aplica-se a:sim assinalado Databricks Runtime 18 LTS e superiores

Note

O Databricks Runtime 18 é mais recente do que o Databricks Runtime 18.0, 18.1 e 18.2. Funcionalidades que anteriormente seriam enviadas como versões numeradas posteriores agora são enviadas como atualizações datadas do Databricks Runtime 18. Para mais detalhes, consulte Sobre as notas de lançamento unificadas.

Important

Este recurso está no Public Preview.

Recolhe um array de valores de Geografia ou Geometria numa única coleção multiponto, multilinha, multipolígono ou de geometria.

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

Syntax

from pyspark.databricks.sql import functions as dbf

dbf.st_collect(col=<col>)

Parameters

Parâmetro Tipo Description
col pyspark.sql.Column ou str Um array de valores de Geografia , ou um array de valores de Geometria .

Devoluções

pyspark.sql.Column: Um valor de Geografia ou Geometria , representando uma coleção de multiponto, multilinha, multipolígono ou geometria.

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

  • Se todos os não-elementosNone forem pontos, retorna um multiponto.
  • Se todos os não-elementosNone forem strings de linha, devolve uma stringa multilinha.
  • Se todos os não-elementosNone forem polígonos, retorna um multipolígono.
  • Caso contrário, devolve uma coleção de geometria.

Cada saída contém um elemento por elemento que não seja doNone array.

Entradas multi-tipadas (multiponto, multilinha, multipolígono) e entradas de coleção de geometria são preservadas como elementos da coleção de geometria resultante; não são achatados.

O valor SRID da saída é o valor SRID comum das geometrias não deNone entrada.

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

Se o array de entrada estiver vazio ou contiver apenas None valores, a coleção de geometria 2D vazia é devolvida. Neste caso, o SRID da saída é determinado da seguinte forma:

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

Se quaisquer duas geometrias não deNone entrada tiverem valores SRID diferentes, a função gera um erro de ST_DIFFERENT_SRID_VALUES .

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

Examples

Recolhe uma matriz de pontos num multiponto.

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))')]

Recolhe um array de polígonos num multipolígono.

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)))')]

Recolhe um array de tipos mistos de geometria numa coleção de geometria.

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))')]

Devolve a coleção de geometria 2D vazia para um array de entrada vazio.

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')]

Retorna None para uma None entrada.

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)]