Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何加入数据帧并按时间戳获取最新的行?_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 如何加入数据帧并按时间戳获取最新的行?

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

我有两个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     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别忘了告诉我们它是否帮助您解决了问题:)