Python 根据匹配值连接两个pyspark数据帧(精确到小数点)

Python 根据匹配值连接两个pyspark数据帧(精确到小数点),python,pyspark,Python,Pyspark,我在pyspark中有两个数据帧: df1 df2 我想根据匹配的lat(长度值高达2位小数)连接这两个表。所以我想要的输出数据帧是: df3 考虑到df2的行数超过100万行,我如何以有效的方式实现这一点 我尝试用 df3= df1。连接(DF2,DF1,NeXYLAT= = DF2.LAT','Lead)但不确定如何在DF1< P>中使用“强> >代码>子串< /代码> 在您的连接条件下。 df3=df1.join(df2, df1.new_lat == substring(df2.lat,

我在pyspark中有两个数据帧: df1

df2

我想根据匹配的lat(长度值高达2位小数)连接这两个表。所以我想要的输出数据帧是:

df3

考虑到df2的行数超过100万行,我如何以有效的方式实现这一点


<>我尝试用<代码> df3= df1。连接(DF2,DF1,NeXYLAT= = DF2.LAT','Lead)但不确定如何在DF1

< P>中使用“强> >代码>子串< /代码> <强>在您的连接条件下。

df3=df1.join(df2, df1.new_lat == substring(df2.lat,1,5), 'left')

substring
无疑是最简单的实现,但不会始终提供您可能需要的精度(考虑0.5上的整数舍入)

为了获得更好的精度,您可以使用快速过滤器:

阈值=0.01
df3=(
df1
.加入(df2)
.filter(df1.new_lat-阈值< SCOTCORK我尝试了这个,但是不知道如何考虑连接语句中的2个十进制<代码> DF3= DF1.连接(DF2,DF1,NeXYLAT= = DF2,LAT,“Lead”)< /C> >我猜最直接的方法是将 DF2.LAT列到两个小数点,然后加入该列。
+---------+-----+--------------------+----------+------------+
|    label|value|            dateTime|       lat|        long|
+---------+-----+--------------------+----------+------------+
|msg      |  437|2019-04-06T05:10:...|33.6436263|-117.6255508|
|msg      |  437|2019-04-06T05:10:...|33.6436263|-117.6255508|
|msg      |  437|2019-04-06T05:10:...| 23.453622|-101.5423864|
|msg      |  437|2019-04-06T05:10:...| 23.453622|-101.5420964|
+---------+-----+--------------------+----------+------------+------+
|    label|value|            dateTime|       lat|        long|state |
+---------+-----+--------------------+----------+------------+-------
|msg      |  437|2019-04-06T05:10:...|33.6436263|-117.6255508|STATE 1
|msg      |  437|2019-04-06T05:10:...|33.6436263|-117.6255508|STATE 1
|msg      |  437|2019-04-06T05:10:...| 23.453622|-101.5423864|STATE 2
|msg      |  437|2019-04-06T05:10:...| 23.453622|-101.5420964|STATE 2
df3=df1.join(df2, df1.new_lat == substring(df2.lat,1,5), 'left')