2

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

obj= obj.filter(e => e.colOne.exactMatch(e.colTwo))

我无法让这个工作,有没有办法通过比较两列的内容来过滤?

4

2 回答 2

0

编写函数时无法比较两列。这里推荐的策略是创建一个新列来记录您的平等。例如,在您的 pyspark 管道中,就在您生成被索引的最终对象之前:

df.withColumn("colOneEqualsColTwo", F.when(
     F.col("colOne") == F.col("colTwo"), True
).otherwise(False)

然后过滤该新列:

obj = obj.filter(e => e.colOneEqualsColTwo.exactMatch(true))
于 2022-02-11T18:09:34.420 回答
0

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

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

let myFilteredObjects = new Set<ObjectType>();

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

编辑:使用更大规模对象集的解决方案进行更新:

您可以在对象的基础数据集中创建一个新boolean列,即trueifcolOnecolTwomatch,false否则。然后通过该方法过滤这个新列filter()将按预期工作。

于 2022-02-11T13:51:57.843 回答