Для Spark версии 1.5 +
Предположим, у вас был следующий фрейм данных:
df = sqlCtx.createDataFrame([("2018-Jan-12",)], ["date_str"])
df.show()
#+-----------+
#| date_str|
#+-----------+
#|2018-Jan-12|
#+-----------+
Чтобы избежать использования udf
s, вы можете сначала преобразовать строку в дату :
from pyspark.sql.functions import from_unixtime, unix_timestamp
df = df.withColumn('date', from_unixtime(unix_timestamp('date_str', 'yyyy-MMM-dd')))
df.show()
#+-----------+-------------------+
#| date_str| date|
#+-----------+-------------------+
#|2018-Jan-12|2018-01-12 00:00:00|
#+-----------+-------------------+
Затем отформатировать дату в виде строки в желаемом формате:
from pyspark.sql.functions import date_format, col
df = df.withColumn("new_date_str", date_format(col("date"), "yyyyMMdd"))
df.show()
#+-----------+-------------------+------------+
#| date_str| date|new_date_str|
#+-----------+-------------------+------------+
#|2018-Jan-12|2018-01-12 00:00:00| 20180112|
#+-----------+-------------------+------------+
Или, если вы предпочитаетеВы можете связать все это вместе и пропустить промежуточные шаги:
import pyspark.sql.functions as f
df.select(
f.date_format(
f.from_unixtime(
f.unix_timestamp(
'date_str',
'yyyy-MMM-dd')
),
"yyyyMMdd"
).alias("new_date_str")
).show()
#+------------+
#|new_date_str|
#+------------+
#| 20180112|
#+------------+