python - Pyspark/Python - 使用 MIN/MAX 而不丢失列

标签 python apache-spark pyspark apache-spark-sql

我有一个像这样的数据框:

----------------------------------------------
| User_ID |      Timestamp      | Article_ID |
----------------------------------------------
| 121212  | 2018-01-15 10:00:00 |      1     |
| 121212  | 2018-01-15 10:05:00 |      11    |
| 121212  | 2018-01-15 10:10:00 |      12    |
| 989898  | 2018-01-15 17:30:00 |      100   |
| 989898  | 2018-01-15 17:40:00 |      200   |
| 989898  | 2018-01-15 17:50:00 |      1     |
| 989898  | 2018-01-15 17:55:00 |      11    |
|...      |                     |            |
----------------------------------------------

现在我想要每个 User_ID 具有最小时间戳的行。 结果应该是:

----------------------------------------------
| User_ID |      Timestamp      | Article_ID |
----------------------------------------------
| 121212  | 2018-01-15 10:00:00 |      1     |
| 989898  | 2018-01-15 17:30:00 |      100   |
|...      |                     |            |
----------------------------------------------

我尝试了以下方法:

df.groupBy('User_ID').agg(F.min('Timestamp')).show()

这还不错,但是缺少“Article_ID”列... 有人可以帮我吗?

最佳答案

我找到了一个使用函数 struct() 的工作解决方案:

df.select('User_ID',F.struct('Timestamp','Article_ID').alias("TA")).groupBy('User_ID').agg(F.min("TA").alias("TA")).select('User_ID','TA.Timestamp','TA.Article_ID').orderBy('User_ID').limit(10).toPandas()

另请参阅原始来源:How to select the first row of each group?

关于python - Pyspark/Python - 使用 MIN/MAX 而不丢失列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48270789/

相关文章:

python - 如何将 DataFrame 作为输入传递给 Spark UDF?

hadoop - PySpark:在连接中处理 NULL

python - 为什么在 Transformer 模型中嵌入向量乘以一个常数?

scala - org.apache.spark.sql.AnalysisException : Reference 'dattim' is ambiguous, 可能是 : dattim#6, event_dattim#55.;

apache-spark - Pyspark:创建数据帧 - Map 类型中的 bool 字段被解析为 null

java - 从数据框中的列中删除特殊字符

python - Seaborn:如何设置条形边框的线宽或颜色?

java - 为 API 定义自定义错误代码的最佳实践

python - numpy 函数将数组元素设置为给定索引列表的值

apache-spark - 在pyspark中,使用df.write.partitionBy(..).save时如何对某一列的部分值进行分区?