首页 > 解决方案 > Spark(使用pyspark)使用一个数据帧(结构化流)中的值来查询静态数据帧并将第二个df中的行与第一个合并

问题描述

我有一个结构化的流数据帧,我想为每一行获取一列中的值(在本例中为时间戳,如 1525670700)并使用该值查询另一个静态数据帧以获取最接近该值的时间戳并合并一个从该查询返回到结构化流数据帧的行,例如,

my_row_to_merge_df = weather_df.filter(weather_df.timestamp_unix > 1525670700).sort(col('timestamp_unix').asc()).limit(1).show()

有了这个,我想做类似的事情:

joined_df = streaming_df.merge(function_to_return_row_from_other_df(col('timestamp')))

在这种情况下使用连接的问题是时间戳可能不完全匹配,但如果它们相差几秒钟甚至几分钟也没关系。

所以在那,我不确定我可以做什么样的操作来得到这个结果。

标签: pythonmergepysparkspark-dataframe

解决方案


您可以使用以下方法将时间戳四舍五入到您需要的重要性级别:

# Assuming timestamp is in seconds
timestamp_rounded = int(timestamp - (timestamp % int(minutes * 60)))

其中“分钟”是您要四舍五入的级别。例如,如果您选择分钟 = 5,您会将时间戳四舍五入(向下)为每 5 分钟一次。

您可以添加新列,如下所示:How to do math operation with two column in dataframe using pyspark


推荐阅读