Sem*_*ken 3 python apache-spark apache-spark-sql pyspark
我有一个pyspark.sql.dataframe.DataFrame使用创建的实例
dataframe = sqlContext.sql("select * from table").
Run Code Online (Sandbox Code Playgroud)
一列是 'arrival_date' 并包含一个字符串。
如何修改此列以便仅从中取出前 4 个字符并丢弃其余字符?
如何将此列的类型从字符串转换为日期?
在 graphlab.SFrame 中,这将是:
dataframe['column_name'] = dataframe['column_name'].apply(lambda x: x[:4] )
Run Code Online (Sandbox Code Playgroud)
和
dataframe['column_name'] = dataframe['column_name'].str_to_datetime()
Run Code Online (Sandbox Code Playgroud)
正如 Orions 所说,您不能修改列,但可以覆盖它。此外,您不需要创建用户定义的函数,因为有一个用于提取子字符串的内置函数:
from pyspark.sql.functions import *
df = df.withColumn("arrival_date", df['arrival_date'].substr(0, 4))
Run Code Online (Sandbox Code Playgroud)
要将其转换为日期,您可以使用to_date,正如 Orions 所说:
from pyspark.sql.functions import *
df = df.withColumn("arrival_date", to_date(df['arrival_date'].substr(0, 4)))
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要指定格式,则应使用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)
Run Code Online (Sandbox Code Playgroud)
所有这些都可以在pyspark 文档中找到。
| 归档时间: |
|
| 查看次数: |
11801 次 |
| 最近记录: |