【发布时间】:2020-07-06 14:18:47
【问题描述】:
我在 pyspark 中有两个数据框: df1
+-------+--------+----------------+-------------+
|new_lat|new_long| lat_long| State_name|
+-------+--------+----------------+-------------+
| 33.64| -117.63|[33.64,-117.625] |STATE 1 |
| 23.45| -101.54|[23.45,-101.542] |STATE 2 |
+-------+--------+----------------+-------------+
df2
+---------+-----+--------------------+----------+------------+
| 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|
我想根据匹配的 lat、long 值加入这两个表,直到小数点后 2 位。所以我想要的输出数据框是:
df3
+---------+-----+--------------------+----------+------------+------+
| 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
考虑到 df2 的行数超过 1 亿行,我怎样才能有效地做到这一点。
我尝试使用df3=df1.join(df2, df1. new_lat == df2. lat, 'left'),但不确定如何在 df1 中考虑最多两位小数
【问题讨论】:
-
到目前为止你尝试了什么?
-
@ScootCork 我试过这个,但不确定如何在连接语句
df3 = df1.join(df2, df1. new_lat == df2. lat, 'left')中考虑最多 2 位小数 -
我想最直接的方法是将
df2.lat列四舍五入到小数点后两位,然后加入该列。