【问题标题】:Date_add function returning NoneDate_add 函数返回无
【发布时间】:2017-10-24 15:24:45
【问题描述】:

我在dataframe1 中有一个列,其日期为today_date,我还有另一个dataframe2,其中包含days 以及其他列。我正在将这两个数据帧转换为一个临时表

我需要将dataframe1dataframe2 加入一列,然后添加today_datedays。我正在使用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 值。正在使用的配置单元版本已经很老了...我在pyspark 中运行此代码...

非常感谢任何帮助..

注意:我将 days 函数从 unicode 转换为 int 使用

dataframe2['days']=dataframe2['days'].astype(int)

【问题讨论】:

    标签: python pyspark hiveql dateadd


    【解决方案1】:

    如果没有示例数据框,很难说出了什么问题...也许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|
        +-----------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2019-10-23
      • 2016-03-28
      • 2016-10-20
      相关资源
      最近更新 更多