【发布时间】:2018-08-30 13:59:54
【问题描述】:
我有一个数据框,其中包含客户每个日期的多个产品。在一个新列中,我试图按客户获取以前的唯一日期。
Cst Prod Dt Desired Output
C1 P1 1-Jan-16 0
C1 P2 1-Jan-16 0
C1 P3 1-Jan-16 0
C1 P4 1-Jan-16 0
C1 P1 20-Jan-16 1-Jan-16
C1 P2 20-Jan-16 1-Jan-16
C2 P2 5-Feb-17 0
C2 P3 5-Feb-17 0
C2 P4 5-Feb-17 0
C2 P1 30-Mar-17 5-Feb-17
我刚开始使用 PySpark。到目前为止,我尝试为每个客户创建一个日期数组列 (CUM_DATE),然后应用 UDF 来获取除行中一个之外的所有日期,然后取数组列的最大值。
有点像-
def filter_currdate(arr, dt):
return [x for x in arr if x not in dt]
filter_currdate_udf = F.udf(lambda x: filter_code(x), ArrayType(DateType()))
df = df.withColumn('except_date', filter_currdate_udf(df['CUM_DATE'], df['Dt']))
df = df.withColumn('max_prev_date',F.max(df['except_date']))
但它遇到了错误,我无法找到更好的方法来获得此输出。
【问题讨论】:
标签: python pyspark apache-spark-sql