【发布时间】:2018-09-10 07:44:25
【问题描述】:
我目前正试图弄清楚,如何通过列参数将字符串格式参数传递给 to_date pyspark 函数。
具体来说,我有以下设置:
sc = SparkContext.getOrCreate()
df = sc.parallelize([('a','2018-01-01','yyyy-MM-dd'),
('b','2018-02-02','yyyy-MM-dd'),
('c','02-02-2018','dd-MM-yyyy')]).toDF(
["col_name","value","format"])
我目前正在尝试添加一个新列,将列 F.col("value") 中的每个日期(一个字符串值)解析为一个日期。
对于每种格式,可以分别使用
df = df.withColumn("test1",F.to_date(F.col("value"),"yyyy-MM-dd")).\
withColumn("test2",F.to_date(F.col("value"),"dd-MM-yyyy"))
然而,这给了我 2 个新列 - 但我希望有 1 个包含两个结果的列 - 但是使用 to_date 函数调用该列似乎是不可能的:
df = df.withColumn("test3",F.to_date(F.col("value"),F.col("format")))
这里抛出一个错误“Column object not callable”。
是否可以为所有可能的格式提供通用方法(这样我就不必为每种格式手动添加新列)?
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql