【问题标题】:Spark: How to convert a String to multiple columnsSpark:如何将字符串转换为多列
【发布时间】:2022-01-17 09:14:37
【问题描述】:

我有一个数据框,其中包含一个字段项,该字段项是一个具有项目数组的字符串:

[{"item":"76CJMX4Y"},{"item":"7PWZVWCG"},{"item":"967NBPMS"},{"item":"72LC5SMF"},{"item":"8N6DW3VD"},{"item":"045QHTU4"},{"item":"0UL4MMSI"}]

root
 |-- item: string (nullable = true)

我想将项目作为字符串数组。有人可以告诉我是否有一种简单的方法可以使用默认 from_json 做到这一点?

根 |-- 项目:数组(可为空=真)

这样我就只有

["76CJMX4Y", "7PWZVWCG", "967NBPMS", "72LC5SMF", "8N6DW3VD", "045QHTU4", "0UL4MMSI"]

谢谢

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    使用 Spark 内置函数 from_json,然后使用高阶函数 transform 从数组中提取项目。

    示例

    //from_json we are creating a json array then extracting item from the array
    import org.apache.spark.sql.functions._
    
    
    df.selectExpr("""transform(from_json(item,'array<struct<item:string>>'),x->x.item) as item""").show(10,false)
    
    //+----------------------------------------------------------------------+
    //|item                                                                  |
    //+----------------------------------------------------------------------+
    //|[76CJMX4Y, 7PWZVWCG, 967NBPMS, 72LC5SMF, 8N6DW3VD, 045QHTU4, 0UL4MMSI]|
    //+----------------------------------------------------------------------+
    

    【讨论】:

      【解决方案2】:

      您可以在 : 上使用 split(),然后使用 sort_array() 对值进行排序(这样您不感兴趣的值就在顶部或底部,然后使用 slice() 进行过滤。

      供您参考:https://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/functions.html(即使是 Java 版本,也是函数的合成列表)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-25
        • 1970-01-01
        • 2016-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多