【问题标题】:Spark: Removing first array from Nested Array in ScalaSpark:从 Scala 中的嵌套数组中删除第一个数组
【发布时间】:2020-12-06 22:12:27
【问题描述】:

我有一个包含 2 列的 DataFrame。我想删除每条记录中嵌套数组的第一个数组。示例:- 我有一个像这样的 DF

+---+-------+--------+-----------+-------------+
|id |arrayField                                |
+---+------------------------------------------+
|1  |[[Akash,Kunal],[Sonu,Monu],[Ravi,Kishan]] |
|2  |[[Kunal, Mrinal],[Priya,Diya]]            |
|3  |[[Adi,Sadi]]                              |
+---+-------+---------+----------+-------------+

我想要这样的输出:-

+---+-------+------+------+-------+
|id |arrayField                   |
+---+-----------------------------+
|1  |[[Sonu,Monu],[Ravi,Kishan]]  |
|2  |[[Priya,Diya]]               |
|3  | null                        |
+---+-------+------+------+-------+

【问题讨论】:

    标签: arrays scala dataframe apache-spark nested


    【解决方案1】:

    Spark-2.4 使用 slice 函数。

    Example:

    df.show(10,false)
    /*
    +------------------------+
    |arrayField              |
    +------------------------+
    |[[A, k], [s, m], [R, k]]|
    |[[k, M], [c, z]]        |
    |[[A, b]]                |
    +------------------------+
    */
    
    import org.apache.spark.sql.functions._
    
    df.withColumn("sliced",expr("slice(arrayField,2,size(arrayField))")).
    withColumn("arrayField",when(size(col("sliced"))==0,lit(null)).otherwise(col("sliced"))).
    drop("sliced").
    show()
    /*
    +----------------+
    |      arrayField|
    +----------------+
    |[[s, m], [R, k]]|
    |        [[c, z]]|
    |            null|
    +----------------+
    */
    

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 2018-02-06
      • 2019-10-14
      • 1970-01-01
      • 2018-06-16
      • 2019-04-30
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      相关资源
      最近更新 更多