pyspark - pyspark,获取第一列值等于 id 并且第二列值介于两个值之间的行,对数据框中的每一行执行此操作
问题描述
所以我有一个像这样的pyspark数据框,我们称它为数据框a:
+-------------------+---------------+----------------+
| reg| val1| val2 |
+-------------------+---------------+----------------+
| N110WA| 1590030660| 1590038340000|
| N876LF| 1590037200| 1590038880000|
| N135MH| 1590039060| 1590040080000|
另一个像这样,我们称它为数据帧 b:
+-----+-------------+-----+-----+---------+----------+---+----+
| reg| postime| alt| galt| lat| long|spd| vsi|
+-----+-------------+-----+-----+---------+----------+---+----+
|XY679|1590070078549| 50| 130|18.567169|-69.986343|132|1152|
|HI949|1590070091707| 375| 455| 18.5594|-69.987804|148|1344|
|JX784|1590070110666| 825| 905|18.544968|-69.990414|170|1216|
是否有某种方法可以创建一个 numpy 数组或 pyspark 数据帧,其中对于数据帧 a 中的每一行,数据帧 b 中的所有行在 val 1 和 val 2 之间具有相同的 reg 和 posttime 吗?
解决方案
您可以尝试以下解决方案 - 让我们知道是否可行或其他任何预期?
为了展示可行的解决方案,我对估算进行了一些修改-
在此输入
from pyspark.sql import functions as F
df_a = spark.createDataFrame([('N110WA',1590030660,1590038340000), ('N110WA',1590070078549,1590070078559)],[ "reg","val1","val2"])
df_b = spark.createDataFrame([('N110WA',1590070078549)],[ "reg","postime"])
df_a.show()
df_a
+------+-------------+-------------+
| reg| val1| val2|
+------+-------------+-------------+
|N110WA| 1590030660|1590038340000|
|N110WA|1590070078549|1590070078559|
+------+-------------+-------------+
df_b
+------+-------------+
| reg| postime|
+------+-------------+
|N110WA|1590070078549|
+------+-------------+
解决方案在这里
from pyspark.sql import types as T
from pyspark.sql import functions as F
#df_a = df_a.join(df_b,'reg','left')
df_a = df_a.withColumn('condition_col', F.when(((F.col('postime') >= F.col('val1')) & (F.col('postime') <= F.col('val2'))),'1').otherwise('0'))
df_a = df_a.filter(F.col('condition_col') == 1).drop('condition_col')
df_a.show()
最终输出
+------+-------------+-------------+-------------+
| reg| val1| val2| postime|
+------+-------------+-------------+-------------+
|N110WA|1590070078549|1590070078559|1590070078549|
+------+-------------+-------------+-------------+
推荐阅读
- javascript - 尝试有条件地将属性+值添加到 .js 中的对象(React)
- javascript - 如何在 react-select 中添加多个选择选项值
- netty - 使用 SniHandler 确定客户端与 Netty 服务器协商的 TLS 版本
- ubuntu - 在 Ubuntu Linux 中执行 docker-compose 命令时权限被拒绝
- reactjs - 在 React 中注销后如何重定向到主页
- json - 使用嵌套的动态类型解析 JSON
- java - 如何在自定义视图中解决 InflateException
- flutter - Flutter:如何在单击图标时删除 Listview 项
- mysql - 无法从续集或终端连接 mysql
- python - 在 Python 中创建桌面应用程序的最佳方法