2017-09-20 4 views
3

私はこのようなデータの列を持っている:配列の配列でカラムを爆発 - 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 
+0

タイプは何ですか? 'array >'? D 1と私は@AshleyOも+1を与え、受け入れることを示唆:) –

答えて

3

あなたが別々の列にカンマで結果の文字列を角括弧を取り除くために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| 
+-----------+----------+-----+ 
+1

の結果を投稿してください1つの構造体。私は情報をより明確に表示するように編集しました。私は、この概念は –

+0

私はより明確にされている必要があり、データがすべてである:あなたは速かった - 私は構文を思い出すことができませんでした 'printSchema' –

+0

はそうあなたが '[「[[-77.1082606、38.935738]]」、「ポイント」]'持っても助けることができるかどうかを確認するためにテストしていますか? – mtoto

関連する問題