Dataframe 在pyspark中将Stringtype的日期转换为Int

Dataframe 在pyspark中将Stringtype的日期转换为Int,dataframe,pyspark,rdd,Dataframe,Pyspark,Rdd,我有一个如下所示的数据集: 项目编号|日期 123 | 2016-09-23 123 | 2016-10-23 112 | 2016-08-15 112 | 2016-09-15 我使用groupByKey使其看起来像这样: '123',['2016-09-23','2016-10-23'] '112',['2016-08-15','2016-09-15'] 现在我想计算这两个日期之间的差异。我有一个函数如下所示: def ipi_generate(x):

我有一个如下所示的数据集: 项目编号|日期 123 | 2016-09-23 123 | 2016-10-23 112 | 2016-08-15 112 | 2016-09-15

我使用groupByKey使其看起来像这样: '123',['2016-09-23','2016-10-23'] '112',['2016-08-15','2016-09-15'] 现在我想计算这两个日期之间的差异。我有一个函数如下所示:

def ipi_generate(x):
    member_ipi_list = []
    master_ans = []
    for j in range(1,len(x[1])):
        ans = x[1][j]-x[1][j-1] 
        master_ans.append(ans)
    member_ipi_list.append(x[0])
    member_ipi_list.append(master_ans)
    return [member_ipi_list]
它将日期视为字符串。如何在pyspark中将字符串日期转换为整数日期?
谢谢。

您应该使用窗口功能,而不是使用自定义项:

首先,让我们创建数据框架:

df=spark.createDataFrame(
sc.并行化([“123”、“2016-09-23”]、[“123”、“2016-10-23”]、[“123”、“2016-11-23”]、[“123”、“2017-01-01”]、[“112”、“2016-08-15”]、[“112”、“2016-09-15”]),
[“项目编号”,“日期”]
)
现在,让我们使用lag函数在同一行上显示当前行的日期和前一行的日期:

import pyspark.sql.函数作为psf
从pyspark.sql导入窗口
w=窗口、分区单位(“项目编号”)、订购单位(“日期”)
df.withColumn(
“日期差异”,
psf.datediff(“日期”,psf.lag(“日期”)。超过(w))
).show()
+--------+----------+---------+
|项目编号日期日期差异|
+--------+----------+---------+
|112 | 2016-08-15 |空|
|     112|2016-09-15|       31|
|123 | 2016-09-23 |空|
|     123|2016-10-23|       30|
|     123|2016-11-23|       31|
|     123|2017-01-01|       39|
+--------+----------+---------+

您是否尝试过使用datetime库?正如在
datetime.strtime(x[1][j],“%Y-%m-%d”)中一样,
在按键分组之前,是否有理由不将这些对象转换为datetime对象?我也不知道您更大的目标,所以这可能是合适的,也可能不是合适的,但是窗口函数或聚合函数在这里可能更容易实现。查看它们。现在在函数中使用datetime库。很好,谢谢我尝试将字符串转换为datetime对象,但这不是最终输出所需的方式,因此在按键分组之前没有这样做。