当前位置: 首页 > 知识库问答 >
问题:

Spark:扁平化简单的多列数据

史淳
2023-03-14

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

这意味着我有一个“before”和“after”表要比较。将before和after dataframe组合在一起生成的行描述了一对数据在一个dataframe中出现而在另一个dataframe中不出现的位置。

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}
  • 单独且不同地合并所有列
  • 平面地图和不同的
  • 映射和展平

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

其他说明

  • id1-id2对的顺序只对变化检测很重要
  • 结果列表中的顺序不重要
  • DataFrame在10k和100k行之间
  • 结果列表中的distinct很好,但不是必需的;对于distinct操作来说,假设是微不足道的

共有1个答案

卫君博
2023-03-14

尝试以下步骤,将所有行转换为SEQ,然后收集所有行,然后对数据进行扁平化并移除null值:

val df = Seq(("A","B"),(null,"A")).toDF 
val result = df.rdd.map(_.toSeq.toList)
   .collect().toList.flatten.toSet - null
 类似资料:
  • 问题内容: 这可能是初学者的问题,但是我已经花了更长的时间阅读文档,而且找不到任何解决方案。我以为我可以对每个维度使用爆破,然后将这些字符串放回一起以组成新的简单数组。但是我不知道联接模式是否也不在值中,因此在执行完原始值之后,可能会损坏。 多维数组内部是否存在类似于数组的内容? 问题答案: 采用 使用PHP 5.5.9-1ubuntu4.24(CLI)测试(内置:2018年3月16日12:32:

  • 问题内容: 我有一个这样的清单: 此列表中的每个项目可能包含一个数据对或一个元组,我想将此列表更改为 然后这样做: 我不知道如何更改列表结构,或者如何基于原始列表进行相同的计算? 问题答案: 如果您只想整理列表,请使用:http : //docs.python.org/library/itertools.html#itertools.chain.from_iterable

  • 本文向大家介绍Python分组扁平化列表,包括了Python分组扁平化列表的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,将包含子列表的列表展开。给定的数字将子列表展开,直到给定的数字索引作为部分。让我们看一个例子来清楚地理解它。 输入项 输出结果 让我们看看解决问题的步骤。 初始化列表和编号。 初始化一个空列表。 使用范围(0,len(lists),number遍历列表

  • 我有一个这样的json文件: 我需要以下格式的表格: 所以它只需迭代每个键值对,将键作为列名,并将其值放入表值。 我当前的代码: 这里的问题是我必须自己提供列名。有什么方法可以让这个更通用吗?

  • 问题内容: 我在这里发现了同样的问题… …但是没有正确的答案。 最好的建议之一是将嵌套对象包装到新类中,但是这种方法引入了另一个问题:乐高名称。 在我的示例中,此类的最逻辑名称是与父类相同的名称,当然这是不可能的。我的示例很简单,我只想消除父类中的“语言”属性。有人可以帮我做吗? json的示例: 问题答案: 如果JSON属性名称与c#命名约定冲突,则可以在序列化期间使用或批注替换其他名称。 例如