Python 筛选行在另一个数据帧范围内的pyspark数据帧

Python 筛选行在另一个数据帧范围内的pyspark数据帧,python,dataframe,pyspark,apache-spark-sql,pyspark-sql,Python,Dataframe,Pyspark,Apache Spark Sql,Pyspark Sql,我想从一个数据帧(df1)检索所有行,使其id在另一个数据帧(df2)的id列中任何值的+-10范围内 例如: df1.show() #+-----+---+ #|单词| id| #+-----+---+ #|苹果| 10| #|第30类| #+-----+---+ df2.show() #+----+---+ #|单词| id| #+----+---+ #|大约50英镑| #|杰夫| 3| #|等| 100| #+----+---+ 预期结果: +-----+---+ |单词| id| +

我想从一个数据帧(
df1
)检索所有行,使其
id
在另一个数据帧(
df2
)的
id
列中任何值的+-10范围内

例如:

df1.show()
#+-----+---+
#|单词| id|
#+-----+---+
#|苹果| 10|
#|第30类|
#+-----+---+ 
df2.show()
#+----+---+
#|单词| id|
#+----+---+
#|大约50英镑|
#|杰夫| 3|
#|等| 100|
#+----+---+
预期结果:

+-----+---+
|单词| id|
+-----+---+
|苹果| 10|
+-----+---+
这是因为
“苹果”
距离
“杰夫”
不到10英里

如您所见,如果
df1
中的
id
符合
df2
中任何
id
的标准,则行是好的。两个数据帧的长度也不一定相同

我已经很清楚如何使用
isin
antijoin
进行精确匹配,但我不清楚这个更宽松的情况

编辑:我的一个新想法是,如果没有预先构建或干净的方法来实现这一点,那么如果定义的函数是可并行的,则可能支持基于它们的复杂过滤。如果我找到了一个方向,我将开始沿着谷歌的轨迹进行更新

编辑:到目前为止,我偶然发现了
udf
函数,但我还没有设法让它工作。我想我需要让它接受一列而不是一个数字。这是我到目前为止得到的

columns=['word','id']
VAL=[
(“苹果”,10),
(“猫”,30岁)
]
df1=sqlContext.createDataFrame(VAL,列)
VAL=[
(“有些”,50),
(“杰夫”,3岁),
(“等”,第100页)
]
df2=sqlContext.createDataFrame(VAL,列)
def输入范围(id1、id2、增量):
id1=int(id1)
id2=int(id2)

返回id1>=id2 delta和id1您不能将数据帧传递给
udf
。实现这一点的自然方法是使用
连接

导入pyspark.sql.f函数
df1.alias('l').join(
df2.别名('r'),
on=f.abs(f.col('l.id')-f.col('r.id'))