我在dataframe1
中有一个日期为today_date
的列,我有另一个dataframe2
,其中有days
以及其他列。我正在转换这两个数据帧进入一个诱惑的
我需要将dataframe1
与dataframe2
一起加入一列,然后将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)
答案 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
所有的功能所以它通常是最有问题的。但是,代码适用于HiveContext
和spark.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|
+-----------+