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

通过仅从两列中取唯一值对pyspark dataframe的列进行分组

岳炎彬
2023-03-14
    |------------------|-------------------|
    |   fruit          |     fruits        | 
    |------------------|-------------------|
    |    apple         |     banana        |
    |    banana        |     apple         |
    |    apple         |     mango         |
    |    orange        |     guava         |
    |    apple         |    pineapple      |
    |    mango         |    apple          |
    |   banana         |     mango         |
    |   banana         |    pineapple      |
    | -------------------------------------|
df9=final_main.groupBy('fruit').agg(collect_list('fruits').alias('values'))
       |------------------|--------------------------------|
       |   fruit          |     values                     | 
       |------------------|--------------------------------|
       |  apple           | ['banana','mango','pineapple'] |
       |  banana          | ['apple']                      |
       |  orange          | ['guava']                      |
       |  mango           | ['apple']                      |
       |------------------|--------------------------------|
       |------------------|--------------------------------|
       |   fruit          |     values                     | 
       |------------------|--------------------------------|
       |  apple           | ['banana','mango','pineapple'] |
       |  orange          | ['guava']                      |
       |------------------|--------------------------------|

共有1个答案

宋飞文
2023-03-14

这看起来像是连接组件的问题。有几种方法可以做到这一点。

1.图形框架

可以使用GraphFrames包。dataframe的每一行都定义一个边,您只需使用df作为边,并使用所有不同结果的dataframe作为顶点来创建一个图。然后调用ConnectedComponents方法。然后,您可以操作输出以获得您想要的结果。

第二种方法有点笨拙。为每一行创建一个“哈希”,如

hashed_df = df.withColumn('hash', F.sort_array(F.array(F.col('fruit'), F.col('fruits'))))

删除该列的所有非独立行

distinct_df = hashed_df.dropDuplicates(['hash'])

再次拆分物品

revert_df = distinct_df.withColumn('fruit', F.col('hash')[0]) \
    .withColumn('fruits', F.col('hash')[1])
grouped_df = revert_df.groupBy('fruit').agg(F.collect_list('fruits').alias('group'))
 类似资料:
  • 问题内容: 我想从以下列表中获取唯一值: 我需要的输出是: 此代码有效: 我应该使用更好的解决方案吗? 问题答案: 首先正确声明你的列表,以逗号分隔。你可以通过将列表转换为一组来获得唯一值。 如果进一步将其用作列表,则应执行以下操作将其转换回列表: 另一种可能(可能更快)的可能性是从头开始使用集合而不是列表。然后你的代码应为: 正如已经指出的那样,集合不保持原始顺序。如果需要,则应查找有序集合实现

  • rank ▲ ✰ vote url 49 432 198 616 url 通过列表中字典的值对列表进行排序 我的到了一个字典的列表,我想对字典的值进行排序. [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}] 对name进行排序,应当是: [{'name':'Bart', 'age':10}, {'name':'Homer', 'age

  • 问题内容: 我有一个MySQL表,其中包含以下类型的信息: 这是我用来从该表获取数据的脚本示例: 该脚本显示表格中的每个日期,例如 我只想显示唯一的日期,例如 问题答案: 在MySQL中使用DISTINCT运算符:

  • 问题内容: 我有一个看起来像这样的列表列表: 删除重复列表的最佳方法是什么?使用上面的示例,我正在寻找会产生这种情况的代码: 我最初以为我可以使用,但这似乎不适用于列表列表。我还看到了一个使用的示例,但是代码对我来说并不完全清楚。谢谢您的帮助! 问题答案: uniq_animal_groups = set(map(tuple, animal_groups)) 尽管您将得到一组元组而不是一组列表,但

  • 本文向大家介绍MySQL从一列值列表中仅获取浮点数,包括了MySQL从一列值列表中仅获取浮点数的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是从列表中获取浮点数的查询- 这将产生以下输出-

  • 问题内容: 我想创建一个(或一组)所有出现在python列表中的唯一值的列表。我有这样的事情: 我想要以下内容: 我知道对于字符串列表,您只能使用set(aList),但是我无法弄清楚如何在列表列表中解决此问题,因为set(aList)会向我显示错误消息 我该如何解决? 问题答案: