在 ETL 过程中,我有一个 5 位整数格式的 SAS 日期字段,表示自 1960 年 1 月 1 日以来的天数。为了使该数据列在分析中更有用,我想将该列转换为 Redshift 中的日期数据类型字段。
目前我正在尝试在 pyspark 中执行此操作,如下所示:
使用字符串文字“1960-01-01”创建了新列“sas_date”
使用 pyspark.sql.function.date_add 我将“sas-date”列作为开始日期参数传递,将整数值“arrival_date”列作为第二个参数传递。
当 date_add 函数运行时,我收到错误 Column not iterable,即使我认为arrival_date 列是一个系列意味着它是可迭代的。但事实并非如此,为什么呢?
当我删除“arrival_date”列并将其替换为静态整数值(例如 1)时,date_add 函数将起作用。
i94 = i94.withColumn('arrival_date', col('arrival_date').cast(Int()))
i94 = i94.withColumn('sas_date', lit("1960-01-01"))
i94 = i94.withColumn('arrival_date', date_add(col('sas_date'), i94['arrival_date']))
Run Code Online (Sandbox Code Playgroud)
我希望能够传递我的列,以便第二个 date_add 参数是动态的。然而 date_add 似乎不接受这个?如果 date_addd 不能完成此任务,除了使用 UDF 之外我还有什么其他选择?
更新: date_add() 操作之前的数据状态
i94.printSchema()
Run Code Online (Sandbox Code Playgroud)
根
|-- cic_id:双精度(可空 = true)
|-- Visa_id:字符串(可空 = true)
|-- port_id: 字符串 (nullable = true)
|--airline_id: 字符串 (nullable = true)
|-- cit_id:双精度(可空 …
pyspark ×1