代码之家  ›  专栏  ›  技术社区  ›  Shankar Panda

如何在scala数据帧中分解两个数组列?

  •  0
  • Shankar Panda  · 技术社区  · 1 年前

    enter image description here

    如果我只做下面的操作,我会得到4行标记,每个主题都会重复。有人能在这里给出一个指针来解决这个问题吗。

    df.withColumn("subject", explode($"subject")).withColumn("mark", explode($"mark"))
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   s.polam    1 年前

    您可以使用 arrays_zip 压缩两个阵列和 inline 以内联分解数组列值。

    你也可以 内联 inline_outer 功能

    df
    .select(
       $"name", 
       inline(
          arrays_zip(
            $"subject", 
            $"mark"
          )
       )
    )
    .show(false)
    
    +----+-------+----+
    |name|subject|mark|
    +----+-------+----+
    |abc |math   |40  |
    |abc |english|50  |
    +----+-------+----+
    
    

    或者

    您也可以使用 explode_outer explode 功能

    df
    .withColumn(
         "zip", 
         explode_outer(
            arrays_zip(
               $"subject", 
               $"mark"
            )
         )
    )
    .select(
        $"name", 
        $"zip.*"
    )
    .show(false)