Python 根据匹配值连接两个pyspark数据帧(精确到小数点)
我在pyspark中有两个数据帧: df1 df2 我想根据匹配的lat(长度值高达2位小数)连接这两个表。所以我想要的输出数据帧是: df3 考虑到df2的行数超过100万行,我如何以有效的方式实现这一点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,
<>我尝试用<代码> 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')