【问题标题】:How to separate array items into separate columns in Spark?如何在 Spark 中将数组项分成单独的列?
【发布时间】:2020-12-10 00:22:36
【问题描述】:
+---------------------------+
|address                    |
+---------------------------+
|[San Jone, 19422, CA, 126]|
|[Queens, 11372, NY, 5543]  |
+---------------------------+

如果里面的值在数组中,如何将一列分成4?

预期输出:

+-----------------------------+
|city    | Zip  |state|street |
+-----------------------------+
|San Jose| 19422| CA  |126    |
|Queens  | 11372| NY  |5543   |
+-----------------------------+

编辑:

 [
    {
        "firstName": "Rack",
        "lastName": "Jackon",
        "gender": "man",
        "age": 24,
        "address": {
            "streetAddress": "126",
            "city": "San Jone",
            "state": "CA",
            "postalCode": "394221"
        }
    },
   


{
    "firstName": "Apache",
    "lastName": "Spark",
    "gender": "Woman",
    "age": 24,
    "address": {
        "streetAddress": "5543",
        "city": "Queens",
        "state": "NY",
        "postalCode": "11372"
    }
}

]

这是我拥有的 .json 文件,创建数据框后,我需要将地址分成 4 列。

【问题讨论】:

  • 我是usnig databricks,我认为是spark 3.0
  • 您提到地址是一个数组,但看起来像结构类型。您可以使用address.*,它将根据您的要求创建新列。

标签: arrays apache-spark multiple-columns


【解决方案1】:

试试下面的代码。

scala> df.show(false)
+--------------------------+
|address                   |
+--------------------------+
|[San Jone, 19422, CA, 126]|
|[Queens, 11372, NY, 5543] |
+--------------------------+
scala> val columns = Seq("city","zip","state","street").zipWithIndex
scala> df.select(columns.map(c => col(s"address")(c._2).as(c._1)):_*).show(false)
+--------+-----+-----+------+
|city    |zip  |state|street|
+--------+-----+-----+------+
|San Jone|19422|CA   |126   |
|Queens  |11372|NY   |5543  |
+--------+-----+-----+------+

【讨论】:

  • 它给出了这个错误:AnalysisException: Field name should be String Literal, but it's 0;
  • val columns = Seq("city","zip","state","street").zipWithIndex test.select(columns.map(c => col(s"address")( c._2).as(c._1)):_*).show
  • 我已经编辑了这个问题,如果它更清楚的话。可以的话请回答。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2022-07-13
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
相关资源
最近更新 更多