2017-09-20 18 views
3

J'ai une colonne avec des données comme ceci:Exploser colonne avec tableau de tableaux - PySpark

[[[-77.1082606, 38.935738]] ,Point] 

Je veux diviser comme de:

column 1   column 2  column 3 
-77.1082606  38.935738   Point 

Comment est-ce possible en utilisant PySpark, ou bien Scala (Databricks 3.0)? Je sais comment faire exploser des colonnes, mais pas diviser ces structures. Merci!!!

EDIT: Voici le schéma de la colonne:

|-- geometry: struct (nullable = true) 
| |-- coordinates: string (nullable = false) 
| |-- type: string (nullable = false 
+0

Quel est le type? 'tableau >'? S'il vous plaît poster le résultat de 'printSchema' –

Répondre

3

Vous pouvez utiliser regexp_replace() pour se débarrasser des crochets, puis split() la chaîne résultante par la virgule dans des colonnes séparées.

from pyspark.sql.functions import regexp_replace, split, col 

df.select(regexp_replace(df.geometry.coordinates, "[\[\]]", "").alias("coordinates"), 
      df.geometry.type.alias("col3")) \ 
    .withColumn("arr", split(col("coordinates"), "\\,")) \ 
    .select(col("arr")[0].alias("col1"), 
      col("arr")[1].alias("col2"), 
     "col3") \ 
    .drop("arr") \ 
    .show(truncate = False) 
+-----------+----------+-----+ 
|col1  |col2  |col3 | 
+-----------+----------+-----+ 
|-77.1082606| 38.935738|Point| 
+-----------+----------+-----+ 
+1

Je ne pouvais pas rappeler la syntaxe - vous étiez plus rapide: D +1 et je suggère @AshleyO de donner aussi +1 et accepter :) –

+0

J'aurais dû être plus clair, les données sont toutes en une structure J'ai modifié pour afficher les informations plus clairement. Je suis en train de tester si ce concept peut aider –

+0

alors vous avez '[" [[-77.1082606, 38.935738]] "," Point "]'? – mtoto