首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较对象上函数中2列的内容?

如何比较对象上函数中2列的内容?
EN

Stack Overflow用户
提问于 2022-02-11 12:56:25
回答 2查看 160关注 0票数 2

我正在尝试构建一个查询来匹配两个列,并且我尝试了以下方法:

代码语言:javascript
运行
复制
obj= obj.filter(e => e.colOne.exactMatch(e.colTwo))

我无法做到这一点,有没有办法通过比较两列的内容来过滤?

EN

回答 2

Stack Overflow用户

发布于 2022-02-11 13:51:57

filter()方法不能根据每个对象动态获取要筛选的值,但可以用于对静态值进行筛选。

您可以通过以下方式过滤名为myUnfilteredObjects类型的ObjectType的较小对象集(<100 K行):

代码语言:javascript
运行
复制
let myFilteredObjects = new Set<ObjectType>();

for (const unfilteredObj of myUnfilteredObjects) {
    if (unfilteredObj.colOne === unfilteredObj.colTwo) {
        myFilteredObjects.add(unfilteredObj);
    }
}

编辑:用大比例尺对象集的解决方案更新:

您可以在对象的基础数据集中创建一个新的boolean列,即true (如果colOnecolTwo匹配,则为false )。然后,通过filter()方法对这个新列进行过滤,将如您所期望的那样工作。

票数 0
EN

Stack Overflow用户

发布于 2022-02-11 18:09:34

在编写函数时不可能比较两列。这里推荐的策略是创建一个新列,以捕获您的平等。例如,在您的pyspark管道中,就在生成被索引的end对象之前:

代码语言:javascript
运行
复制
df.withColumn("colOneEqualsColTwo", F.when(
     F.col("colOne") == F.col("colTwo"), True
).otherwise(False)

然后在新列上过滤:

代码语言:javascript
运行
复制
obj = obj.filter(e => e.colOneEqualsColTwo.exactMatch(true))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71080471

复制
相关文章

相似问题

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