【问题标题】:Explode column with array of arrays - PySpark用数组数组分解列 - PySpark
【发布时间】:2018-03-02 01:10:28
【问题描述】:

我有一列包含这样的数据:

[[[-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

【问题讨论】:

  • 什么类型的? array<array<>>?请发布printSchema的结果

标签: python arrays apache-spark pyspark databricks


【解决方案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|
+-----------+----------+-----+

【讨论】:

  • 我不记得语法了 - 你更快 :D +1 我建议 @AshleyO 也给 +1 并接受 :)
  • 我应该更清楚,数据都在一个结构中。我进行了编辑以更清楚地显示信息。我正在测试这个概念是否可以提供帮助
  • 所以你有["[[-77.1082606, 38.935738]]" ,"Point"] ?
  • 正确。多在一列中
猜你喜欢
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2020-06-10
  • 2020-05-15
相关资源
最近更新 更多