我正在尝试构建一个查询以匹配两列,并且我尝试了以下方法:
obj= obj.filter(e => e.colOne.exactMatch(e.colTwo))
我无法让这个工作,有没有办法通过比较两列的内容来过滤?
我正在尝试构建一个查询以匹配两列,并且我尝试了以下方法:
obj= obj.filter(e => e.colOne.exactMatch(e.colTwo))
我无法让这个工作,有没有办法通过比较两列的内容来过滤?
编写函数时无法比较两列。这里推荐的策略是创建一个新列来记录您的平等。例如,在您的 pyspark 管道中,就在您生成被索引的最终对象之前:
df.withColumn("colOneEqualsColTwo", F.when(
F.col("colOne") == F.col("colTwo"), True
).otherwise(False)
然后过滤该新列:
obj = obj.filter(e => e.colOneEqualsColTwo.exactMatch(true))
该filter()
方法不能根据每个对象动态抓取要过滤的值,但可以用于对静态值进行过滤。
myUnfilteredObjects
您可以通过以下方式过滤命名为 type的较小对象集(<100K 行)ObjectType
:
let myFilteredObjects = new Set<ObjectType>();
for (const unfilteredObj of myUnfilteredObjects) {
if (unfilteredObj.colOne === unfilteredObj.colTwo) {
myFilteredObjects.add(unfilteredObj);
}
}
编辑:使用更大规模对象集的解决方案进行更新:
您可以在对象的基础数据集中创建一个新boolean
列,即true
ifcolOne
和colTwo
match,false
否则。然后通过该方法过滤这个新列filter()
将按预期工作。