gpt4 book ai didi

scala - Spark : Flatten simple multi-column DataFrame

转载 作者:行者123 更新时间:2023-12-01 08:53:47 25 4
gpt4 key购买 nike

如何将一个简单(即没有嵌套结构)数据框展平为列表?
我的问题集是检测从节点对表中更改/添加/删除的所有节点对。

这意味着我有一个“之前”和“之后”表来比较。结合之前和之后的数据帧产生的行描述了一对出现在一个数据帧中而不是另一个数据帧中的位置。

Example:
+-----------+-----------+-----------+-----------+
|before.id1 |before.id2 |after.id1 |after.id2 |
+-----------+-----------+-----------+-----------+
| null| null| E2| E3|
| B3| B1| null| null|
| I1| I2| null| null|
| A2| A3| null| null|
| null| null| G3| G4|

目标是获取整个数据框中所有(不同)节点的列表,如下所示:
{A2,A3,B1,B3,E2,E3,G3,G4,I1,I2}

潜在方法:
  • 将所有列分别并不同
  • flatMap 和独特的
  • 映射和展平

  • 由于该结构众所周知且简单,因此似乎应该有一个同样简单的解决方案。 哪种方法或其他方法是最简单的方法?

    其他注意事项
  • id1-id2 对的顺序仅对变更检测很重要
  • 结果列表中的顺序并不重要
  • DataFrame 介于 10k 和 100k 行之间
  • 结果列表中的 distinct 很好,但不是必需的;假设对于不同的操作是微不足道的
  • 最佳答案

    尝试以下操作,将所有行转换为 seqs,然后收集所有行,然后展平数据并删除空值:

    val df = Seq(("A","B"),(null,"A")).toDF 
    val result = df.rdd.map(_.toSeq.toList)
    .collect().toList.flatten.toSet - null

    关于scala - Spark : Flatten simple multi-column DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53121775/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com