apache-spark - Pyspark 根据列值生成行
问题描述
下面是数据输入,
| start | format_date | diff|
+-------------------+-------------------+--------+
|2019-11-15 20:30:00|2019-11-15 18:30:00| 4 |
预期输出:
start format_date Diff seq
2019-11-15 20:30:00 2019-11-15 18:30:00 4 1
2019-11-15 20:30:00 2019-11-15 18:30:00 4 2
2019-11-15 20:30:00 2019-11-15 18:30:00 4 3
2019-11-15 20:30:00 2019-11-15 18:30:00 4 4
如何根据列的值(差异)生成行?
解决方案
Spark 2.4 或更高版本的解决方案
from pyspark.sql import functions as F
from pyspark.sql.types import *
df= spark.createDataFrame([["2019-11-15 20:30:00","2019-11-15 18:30:00" ,4]], ["start", "format_date", "diff"])
df.select("*", F.explode(F.sequence(F.lit(1), F.col("diff"))).alias("seq")).show
+-------------------+-------------------+----+---+
| start| format_date|diff|seq|
+-------------------+-------------------+----+---+
|2019-11-15 20:30:00|2019-11-15 18:30:00| 4| 1|
|2019-11-15 20:30:00|2019-11-15 18:30:00| 4| 2|
|2019-11-15 20:30:00|2019-11-15 18:30:00| 4| 3|
|2019-11-15 20:30:00|2019-11-15 18:30:00| 4| 4|
推荐阅读
- css - svg 调用的 scss @font-face
- python - 单元测试 matplotlib 的 ginput
- javascript - 在 React Native 中访问 In App Review Alert“取消”和“提交”按钮的方法
- javascript - 从道具填充 Vue 材料设计表
- javascript - Google 日历事件不会使用 Apps 脚本 deleteEvent() 方法删除
- c# - 如何创建 x 数量的任务,例如 list.Count 的依赖?
- r - 如何在ioslides R-markdown中用鼠标从幻灯片滚动到幻灯片
- python - Websocket Permessage-deflate 未发生在服务器-> 客户端方向
- javascript - 使用第 n 个 REST 调用为 Web Worker 的 onmessage 事件创建一个 Promise
- c# - Microsoft Bot Framework Composer 与 Bot Framework SDK 的集成