Разнесение столбца с массивом массивов - PySpark

У меня есть столбец с такими данными:

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

Я хочу, чтобы он был разделен следующим образом:

  column 1          column 2        column 3
 -77.1082606      38.935738           Point

Как это возможно с помощью PySpark или, альтернативно, Scala (Databricks 3.0)? Я знаю, как разбивать столбцы, но не разделяю эти структуры. Спасибо!!!

РЕДАКТИРОВАТЬ: вот схема столбца:

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

person Ashley O    schedule 20.09.2017    source источник
comment
Что за тип? array<array<>>? Пожалуйста, опубликуйте результат printSchema   -  person T. Gawęda    schedule 20.09.2017


Ответы (1)


Вы можете использовать regexp_replace(), чтобы избавиться от квадратных скобок, а затем split() получившуюся строку через запятую в отдельные столбцы.

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|
+-----------+----------+-----+
person mtoto    schedule 20.09.2017
comment
Я не мог вспомнить синтаксис - вы были быстрее: D +1, и я предлагаю @AshleyO также дать +1 и принять :) - person T. Gawęda; 20.09.2017
comment
Я должен был быть более ясным, все данные находятся в одной структуре. Я отредактировал, чтобы информация отображалась более четко. Я тестирую, может ли эта концепция помочь - person Ashley O; 21.09.2017
comment
так у вас ["[[-77.1082606, 38.935738]]" ,"Point"] ? - person mtoto; 21.09.2017
comment
Верный. Все в одной колонке - person Ashley O; 21.09.2017