st_collect
S'applique à : Databricks Runtime 18 et versions ultérieures
Databricks Runtime 18 est plus récent que Databricks Runtime 18,0, 18,1 et 18,2. Les fonctionnalités qui auraient auparavant été livrées sous forme de version numérotée ultérieure sont désormais livrées sous forme de mises à jour datées pour Databricks Runtime 18 à la place. Pour plus de détails, consultez À propos des notes de version unifiées.
Aperçu
Cette fonctionnalité est en aperçu public.
Collecte un tableau de valeurs Géographie ou Géométrie dans une seule collection multipoint, multiligne, multipolygone ou de géométries.
Pour la fonction Databricks SQL correspondante, consultez la fonctionst_collect.
Syntaxe
from pyspark.databricks.sql import functions as dbf
dbf.st_collect(col=<col>)
parameter
Renvoie
pyspark.sql.Column: une valeur Geography ou Geometry, représentant une collection de multipoints, multilignes, multipolygones ou géométries.
Toutes les valeurs None dans le tableau d'entrée sont ignorées. Le type de la sortie dépend des types des géométries d'entrée non-None :
- Si tous les éléments non-
Nonesont des points, renvoie un multipoint. - Si tous les éléments autres que
Nonesont des linestrings, renvoie une multilinestring. - Si tous les éléments non-
Nonesont des polygones, renvoie un multipolygone. - Sinon, renvoie une collection de géométrie.
Chaque sortie contient un élément par élément de tableau non-None.
Les entrées multi-typées (multipoint, multilinestring, multipolygon) et les entrées de collections de géométries sont conservées comme éléments de la collection de géométries résultante ; elles ne sont pas aplaties.
La valeur SRID de la sortie est la valeur SRID commune des géométries d'entrée non-None.
La dimension de la sortie est la dimension commune maximale des géométries d’entrée non-None.
Si le tableau d'entrée est vide ou ne contient que None valeurs, la collection de géométrie vide 2D est renvoyée. Dans ce cas, le SRID de la sortie est déterminé comme suit :
- Si le type d'élément du tableau d'entrée est
GEOGRAPHY(ANY), le SRID de la sortie est4326. - Si le type d'élément du tableau d'entrée est
GEOMETRY(ANY), le SRID de la sortie est0. - Sinon, le SRID de la sortie est celui du type d'élément du tableau d'entrée.
Si deux géométries d'entrée non-None ont des valeurs SRID différentes, la fonction déclenche une erreur ST_DIFFERENT_SRID_VALUES.
La fonction renvoie None si l'entrée est None.
Exemples
Regroupe un tableau de points en un multipoint.
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))')]
Collecte un tableau de polygones en un multipolygone.
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)))')]
Collecte un tableau de types de géométries mixtes dans une collection de géométries.
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))')]
Renvoie la collection de géométries vides 2D pour un tableau d'entrée vide.
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')]
Renvoie None pour une entrée 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)]