Pyspark - 如何拆分具有 Datetime 类型结构值的列?
Pyspark - How do you split a column with Struct Values of type Datetime?
我有以下代码创建 windows 并在 windows 中聚合值。
df.groupBy(window("time", "30 minutes"))\
.agg(func.countDistinct("customer_numbers")
window 列(包含时间段的列)现在是具有两个日期时间的结构。
[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
我想将其分成两列并删除原来的 window 列,但我似乎找不到执行此操作的方法。我尝试使用 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')
我有以下代码创建 windows 并在 windows 中聚合值。
df.groupBy(window("time", "30 minutes"))\
.agg(func.countDistinct("customer_numbers")
window 列(包含时间段的列)现在是具有两个日期时间的结构。
[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
我想将其分成两列并删除原来的 window 列,但我似乎找不到执行此操作的方法。我尝试使用 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')