我是pyspark的新手,我想得到一些帮助。我有一个Pypark数据框 df1
如下图所示:
df1 =
|---------------------|------------------|------------------|
| ID_Machine | Event_Duration | Timestamp |
|---------------------|------------------|------------------|
| 1 | 34 | 213 |
|---------------------|------------------|------------------|
| 1 | 97 | 572 |
|---------------------|------------------|------------------|
| 1 | 78 | 872 |
|---------------------|------------------|------------------|
| 2 | 83 | 345 |
|---------------------|------------------|------------------|
| 2 | 14 | 718 |
|---------------------|------------------|------------------|
| 2 | 115 | 884 |
|---------------------|------------------|------------------|
从中,我必须执行 groupBy
使用聚合方法:
df2 = df1.groupBy("ID_Machine").agg(F.max("Event_duration").alias("Max_Event_Duration")
从而获得:
df2 =
|---------------------|---------------------------|
| ID_Machine | Max_Event_Duration |
|---------------------|---------------------------|
| 1 | 97 |
|---------------------|---------------------------|
| 2 | 115 |
|---------------------|---------------------------|
到目前为止,还不错。不过,现在我想做一些类似 vlookup
在excel中,检索 Timestamp
价值 df1
对应于 Max_Event_Duration
在 df2
,获得如下结果:
|---------------------|---------------------|------------------|
| ID_Machine | Max_Event_Duration | Timestamp |
|---------------------|---------------------|------------------|
| 1 | 97 | 572 |
|---------------------|---------------------|------------------|
| 2 | 115 | 884 |
|---------------------|---------------------|------------------|
有人知道如何创建第三个Dataframe,或者如何修改创建第三个Dataframe的代码吗 df2
为了包括各自的 Timestamp
价值?
谢谢!
2条答案
按热度按时间lp0sw83n1#
您必须首先创建一个名为max event的dataframe,其名称与og dataframe中的相同
这样你就可以
然后通过两个相似的命名列连接Dataframe,然后重命名事件持续时间
这会给你
mec1mxoz2#
你可以把它做成一个新的列
max_event_duration
并过滤其中的列event_duration = max_event_duration
```df2 = df1.select('*', F.max("Event_duration").over(Window.partitionBy("ID_Machine")).alias("Max_Event_Duration"))
.filter("Event_duration = Max_Event_Duration")
.drop("Max_Event_Duration")