首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drop_duplicates后unionByName

drop_duplicates后unionByName
EN

Stack Overflow用户
提问于 2022-06-28 11:51:49
回答 1查看 70关注 0票数 1

我正在尝试堆叠两个数据文件(使用unionByName()),然后删除重复条目(使用drop_duplicates())。我是否可以相信unionByName()将保持行的顺序,也就是说,df1.unionByName(df2)总是会生成第一个N行是df1的数据?因为,如果是这样的话,在应用drop_duplicates()时,df1的行将始终被保留,这就是我想要的行为。

EN

回答 1

Stack Overflow用户

发布于 2022-06-28 12:57:41

UnionByName不能保证您的记录将在df1df2中排在第一位。这些都是分布式和并行的任务,所以您肯定不能在此基础上构建。

解决方案可能是在每个DataFrame中添加一个技术性的DataFrame列,然后是unionByName(),然后使用row_number()分析函数在这个ID中按priority排序,然后选择带有higher priority的一个(在下面的案例1中,表示大于2)。

看看下面的Scala代码:

代码语言:javascript
复制
val df1WithPriority = df1.withColumn("priority", lit(1))
val df2WithPriority = df2.withColumn("priority", lit(2))

df1WithPriority
 .unionByName(df2WithPriority)
    .withColumn(
      "row_num",
      row_number()
        .over(Window.partitionBy("ID").orderBy(col("priority").asc)
    )
    .where(col("row_num") === lit(1))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72785907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档