我正在尝试构建一个查询来匹配两个列,并且我尝试了以下方法:
obj= obj.filter(e => e.colOne.exactMatch(e.colTwo))我无法做到这一点,有没有办法通过比较两列的内容来过滤?
发布于 2022-02-11 13:51:57
filter()方法不能根据每个对象动态获取要筛选的值,但可以用于对静态值进行筛选。
您可以通过以下方式过滤名为myUnfilteredObjects类型的ObjectType的较小对象集(<100 K行):
let myFilteredObjects = new Set<ObjectType>();
for (const unfilteredObj of myUnfilteredObjects) {
if (unfilteredObj.colOne === unfilteredObj.colTwo) {
myFilteredObjects.add(unfilteredObj);
}
}编辑:用大比例尺对象集的解决方案更新:
您可以在对象的基础数据集中创建一个新的boolean列,即true (如果colOne和colTwo匹配,则为false )。然后,通过filter()方法对这个新列进行过滤,将如您所期望的那样工作。
发布于 2022-02-11 18:09:34
在编写函数时不可能比较两列。这里推荐的策略是创建一个新列,以捕获您的平等。例如,在您的pyspark管道中,就在生成被索引的end对象之前:
df.withColumn("colOneEqualsColTwo", F.when(
F.col("colOne") == F.col("colTwo"), True
).otherwise(False)然后在新列上过滤:
obj = obj.filter(e => e.colOneEqualsColTwo.exactMatch(true))https://stackoverflow.com/questions/71080471
复制相似问题