Python 如何加入数据帧并按时间戳获取最新的行?
我有两个PySpark数据帧。我按如下方式连接两个数据帧:Python 如何加入数据帧并按时间戳获取最新的行?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有两个PySpark数据帧。我按如下方式连接两个数据帧: df = df1.join(df2,['col1', 'col2'], 'inner') 数据帧df2有一列timestamp,而df1没有: df1 = col1 col2 AA 11 BB 22 df2 = timestamp col1 col2 col3 1510586134 AA 11 3 1510586140 AA 11 2 1510586200 AA
df = df1.join(df2,['col1', 'col2'], 'inner')
数据帧df2
有一列timestamp
,而df1
没有:
df1 =
col1 col2
AA 11
BB 22
df2 =
timestamp col1 col2 col3
1510586134 AA 11 3
1510586140 AA 11 2
1510586200 AA 11 5
1510586134 BB 22 3
如何根据时间戳
通过最新的df2
行加入数据帧
结果应如下所示:
col1 col2 col3
AA 11 5
BB 22 3
希望这有帮助
从pyspark.sql.functions导入列、列
从pyspark.sql.window导入窗口
#样本数据
df1=sc.parallelize([
[AA',11],
[BB',22]
]).toDF(('col1','col2'))
df2=sc.parallelize([
[1510586134,'AA',11,3],
[1510586140,'AA',11,2],
[1510586200,'AA',11,5],
[1510586134,'BB',22,3]
]).toDF(('timestamp','col1','col2','col3'))
#根据时间戳选择df2的最新行
df2_temp=df2.withColumn('timestamp_format_col',col('timestamp').cast('timestamp'))
window=window.partitionBy('col1','col2')\
orderBy(col('timestamp\u format\u col').desc())
df2_温度=df2_温度\
选择('*',rank().over(window.alias('rank'))\
过滤器(列('rank')==1)\
drop('rank'、'timestamp'、'timestamp\u format\u col')
#最终结果
df=df1.join(df2_temp,['col1','col2'],'inner')
df.show()
输出为:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| BB| 22| 3|
| AA| 11| 5|
+----+----+----+
使用窗口函数获取具有最新行的数据帧
Window.partitionBy(“col1”、“col2”).orderBy(“timestamp”)
,然后以col1、col2
作为键连接生成的数据帧。@philantrovert:.orderBy(col(“timestam”).desc()?我应该在orderBy
之后使用where
来获取最新的一个吗?@Diologius别忘了告诉我们它是否帮助您解决了问题:)