apache-spark - Pyspark - 如何拆分具有 Datetime 类型的结构值的列?
问题描述
我有以下代码创建窗口并在窗口中聚合值。
df.groupBy(window("time", "30 minutes"))\
.agg(func.countDistinct("customer_numbers")
窗口列(保存时间段的列)现在是具有两个日期时间的结构。
[datetime1, datetime2].
我的数据框如下所示:
window customer_numbers
[2018-02-04:10:00:00, 2018-02-04:10:30:00] 10
[2018-02-04:10:30:00, 2018-02-04:11:00:00] 15
我希望它看起来像这样
start End customer_numbers
2018-02-04:10:00:00 2018-02-04:10:30:00 10
2018-02-04:10:30:00 2018-02-04:11:00:00 15
我想把它分成两列并去掉原来的窗口列,但我似乎找不到办法做到这一点。我尝试使用 UDF,尽管我认为在 scala 中你可以简单地做一些事情,比如在 pyspark 中获取我不知道如何执行此操作的第一项。我尝试添加一个 UDF,但它没有给我第一个值,而是给了我一个日历。
.withColumn("key", $"window"._1)
有谁知道我怎么能做到这一点?
解决方案
您可以简单地使用select
函数作为
.select(func.col('window')[0].alias('start'), func.col('window')[1].alias('end'), func.col('customer_numbers')).drop('window')
推荐阅读
- react-native - 我在使用 react-navigation 在 tab-navigator 中制作 stack-navigator 时遇到问题
- docker - 日志文件保存在 docker 容器中的什么位置以及如何复制它?
- java - StringDate to Date 在 java 中 SimpleDateFormat 中的不同时间出现
- c# - .NET 核心中的 gRPC 和分布式事务
- html - 两个 div 填充同一行
- javascript - 如何单击自定义元素(webcomponent)内的元素?
- android - 如何将 URLS 或字符串转换为 base64?
- php - 更新表单时检查单选按钮值是否未使用 PHP 更改
- docker - 在 Docker 容器中运行我的应用程序
- macos-catalina - 如何为 Mac OS catalina 编写驱动程序包扩展