Date_add函数返回None

时间:2017-10-24 15:24:46

标签: python pyspark hiveql dateadd

我在dataframe1中有一个日期为today_date的列,我有另一个dataframe2,其中有days以及其他列。我正在转换这两个数据帧进入一个诱惑的

我需要将dataframe1dataframe2一起加入一列,然后将today_date添加到days。我正在使用sqlcontext来查询这两个临时表

我目前正在使用date_add功能。

sqlcontext.sql("select date_add(today_date,days) as 'Future_date' from dataframe1 x1 join dataframe2 x2 on x1.a=x2.a"

但是,它在future_date中返回None值。我正在使用的hive版本已经很老了...我在pyspark ...

中运行此代码

非常感谢任何帮助..

注意:我使用

days函数从unicode转换为int
dataframe2['days']=dataframe2['days'].astype(int)

1 个答案:

答案 0 :(得分:0)

如果没有示例数据框,很难说出现了什么问题......可能today_date不属于DateType类型(或许它是StringType。)。

以下是测试代码的快速示例:

from datetime import date
sc.parallelize([[m, date(2017, m, 1)] for m in range(1, 11)]).toDF(["a", "today_date"]).registerTempTable("dataframe1")
sc.parallelize([[m, 10*m] for m in range(10)]).toDF(["a", "days"]).registerTempTable("dataframe2")

我在这里使用SQLContext因为它没有HiveContext所有的功能所以它通常是最有问题的。但是,代码适用于HiveContextspark.sql(在Spark 2中):

from pyspark.sql import SQLContext
sqlcontext = SQLContext(sc)
sqlcontext.sql("select date_add(today_date,days) as Future_date from dataframe1 x1 join dataframe2 x2 on x1.a=x2.a").show()

    +-----------+
    |Future_date|
    +-----------+
    | 2017-09-09|
    | 2017-07-31|
    | 2017-11-30|
    | 2017-06-20|
    | 2017-01-11|
    | 2017-03-31|
    | 2017-10-20|
    | 2017-02-21|
    | 2017-05-11|
    +-----------+