我有一个使用
创建的pyspark.sql.dataframe.DataFrame
实例
dataframe = sqlContext.sql("select * from table").
一列是“到达日期”并包含一个字符串。
如何修改此列以便仅从中提取前 4 个字符并丢弃其余字符?
如何将此列的类型从字符串转换为日期?
在 graphlab.SFrame 中,这将是:
dataframe['column_name'] = dataframe['column_name'].apply(lambda x: x[:4] )
和
dataframe['column_name'] = dataframe['column_name'].str_to_datetime()
最佳答案
如 Orions 所述,您无法修改列,但可以覆盖它。此外,您不需要创建用户定义的函数,因为有一个用于提取子字符串的内置函数:
from pyspark.sql.functions import *
df = df.withColumn("arrival_date", df['arrival_date'].substr(0, 4))
要将其转换为日期,您可以使用 to_date
,正如 Orions 所说:
from pyspark.sql.functions import *
df = df.withColumn("arrival_date", to_date(df['arrival_date'].substr(0, 4)))
但是,如果需要指定格式,则应使用unix_timestamp
:
from pyspark.sql.functions import *
format = 'yyMM'
col = unix_timestamp(df['arrival_date'].substr(0, 4), format).cast('timestamp')
df = df.withColumn("arrival_date", col)
所有这些都可以在 pyspark documentation 中找到.
关于python - 如何修改/转换数据框的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39050248/