Pyspark TypeError:参数无效,不是字符串或列

Pyspark TypeError:参数无效,不是字符串或列,pyspark,Pyspark,我这样做对吗? 我有一个时间戳列,我将其转换为每月的第一个日期 df= df.withColumn("monthlyTransactionDate", f.trunc(df[transactionDate], 'mon').alias('month')) 然后,我运行此代码,因为我希望生成最小日期和最大日期之间的所有可能月份: import pyspark.sql.functions as f minDate, maxDate = df.select(f.min("MonthlyTransa

我这样做对吗? 我有一个时间戳列,我将其转换为每月的第一个日期

df= df.withColumn("monthlyTransactionDate", f.trunc(df[transactionDate], 'mon').alias('month'))
然后,我运行此代码,因为我希望生成最小日期和最大日期之间的所有可能月份:

import pyspark.sql.functions as f

minDate, maxDate = df.select(f.min("MonthlyTransactionDate"), f.max("MonthlyTransactionDate")).first()


df.withColumn("monthsDiff", f.months_between(maxDate, minDate))\
    .withColumn("repeat", f.expr("split(repeat(',', monthsDiff), ',')"))\
    .select("*", f.posexplode("repeat").alias("date", "val"))\
    .withColumn("date", f.expr("add_months(minDate, date)"))\
    .select('date')\
    .show(n=50)
但是,在最后一节的开始处获取错误:

TypeError: Invalid argument, not a string or column: 2016-12-01 of type <type 'datetime.date'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.
TypeError:参数无效,不是类型为的字符串或列:2016-12-01。对于列文字,请使用“lit”、“array”、“struct”或“create_map”函数。
这里

 minDate, maxDate = df.select(f.min("MonthlyTransactionDate"), f.max("MonthlyTransactionDate")).first()  
返回日期格式的最小和最大日期值。若要对所有行使用精确值,请使用函数中的
lit()

 df.withColumn("monthsDiff", f.months_between(f.lit(maxDate), f.lit(minDate)))

谢谢,这给了我另一个错误:AnalysisException:u“无法解析”
minDate
“给定的输入列:(后面是我的df中的所有字段)。我将看看我是否可以解析它。我想,错误来自,
withColumn(“date”,f.expr(“add_months(minDate,date)”)
我最终使用Pandas来完成这项工作,然后转换为Spark