PySpark错误通过切片从日期字符串获取年份

时间:2018-04-08 19:13:11

标签: python apache-spark dataframe pyspark apache-spark-sql

在使用PySpark添加列时需要一些帮助。我正在尝试切割我的日期字符串,以便我可以获得年份。

我尝试了以下操作,但它没有工作:

df = sqlContext.createDataFrame( [ ("12/12/1980",1,2) ], ("Date","Num", "#"))

df = df.withColumn("Year", df.Date[-4:])
df.show()

2 个答案:

答案 0 :(得分:1)

Spark不支持使用负索引进行Python切片切片。你可以

df.withColumn("Year", F.split(df.Date, "/")[2])

但是分割

可能更容易
df.withColumn("Year", F.year(F.to_date(df.Date, "dd/MM/yyyy")))

或解析(假设日/月/年格式):

#include  <stdio.h>

int main()
{
    char buf[100];
    char s[100];
    int x = 1;
    fgets(s, 100, stdin);
    snprintf(buf, sizeof buf, s);
    printf("Buffer size is: (%d) \nData input: %s \n", strlen(buf), buf );
    printf("X equals: %d/ in hex: %x\nMemory address for x: (%p) \n", x, x, &x);
    return 0;
}

答案 1 :(得分:0)

您可以使用pyspark.sql.functions中的内置函数解析日期,然后提取年份:

from pyspark.sql.functions import to_date, year

>>> df = sqlContext.createDataFrame([("12/12/1980",1,2)], ("Date","Num", "#"))
>>> df2 = df.withColumn("Year", year(to_date(df.Date, "dd/MM/yyyy")))
>>> df2.show()
+----------+---+---+----+
|      Date|Num|  #|Year|
+----------+---+---+----+
|12/12/1980|  1|  2|1980|
+----------+---+---+----+