在pyspark中与groupby一起使用

时间:2019-10-17 08:51:30

标签: pyspark pyspark-sql pyspark-dataframes

我想根据某些条件来操纵我的交易数据框。我的实际数据框:

+---+------------+---+-------------------+
| id|install_date|age|           txn_date|
+---+------------+---+-------------------+
|  1|  2019-10-01| 33|2019-09-20 15:27:22|
|  1|  2019-10-01| 33|2019-10-02 14:17:20|
|  1|  2019-10-01| 33|2019-10-07 15:17:12|
|  2|  2019-08-10| 45|2019-06-01 14:07:19|
|  2|  2019-08-10| 45|2019-05-01 15:27:22|
|  3|  2019-09-01| 37|2019-09-20 16:17:20|
|  3|  2019-09-01| 37|2019-10-10 15:27:22|

之后,对其进行一些操作以达到此状态-

---+------------+---+----------+--------------------+------------------------------------+
| id|install_date|age|  txn_date|app_install_duration|first_txn_duration_after_app_install|
+---+------------+---+----------+--------------------+------------------------------------+
|  1|  2019-10-01| 33|2019-09-20|                  16|                                 -11|
|  1|  2019-10-01| 33|2019-10-02|                  16|                                   1|
|  1|  2019-10-01| 33|2019-10-07|                  16|                                   6|
|  2|  2019-08-10| 45|2019-06-01|                  68|                                 -70|
|  2|  2019-08-10| 45|2019-05-01|                  68|                                -101|
|  3|  2019-09-01| 37|2019-09-20|                  46|                                  19|
|  3|  2019-09-01| 37|2019-10-10|                  46|                                  39|
+---+------------+---+----------+--------------------+------------------------------------+

现在,我希望我的数据框看起来像这样:

+---+------------+---+----------+--------------------+------------------------------------+-----------
| id|install_date|age|  txn_date|app_install_duration|first_txn_duration_after_app_install|is_active
+---+------------+---+----------+--------------------+------------------------------------+-----------
|  1|  2019-10-01| 33|2019-10-02|                  16|                                   1|    1
|  2|  2019-08-10| 45|2019-06-01|                  68|                                 -70|    0
|  3|  2019-09-01| 37|2019-09-20|                  46|                                  19|    1
+---+------------+---+----------+--------------------+------------------------------------+-----------

到目前为止我所做的:

df=spark.createDataFrame([(1,'2019-10-01',33,'2019-09-20 15:27:22'),
                           (1,'2019-10-01',33,'2019-10-02 14:17:20'),
                           (1,'2019-10-01',33,'2019-10-07 15:17:12'),
                         (2,'2019-08-10',45,'2019-06-01 14:07:19'),
                         (2,'2019-08-10',45,'2019-05-01 15:27:22'),
                         (3,'2019-09-01',37,'2019-09-20 16:17:20'),
                         (3,'2019-09-01',37,'2019-10-10 15:27:22')],
                          ['id','install_date','age','txn_date'])    
df = df.withColumn('install_date',to_date(unix_timestamp(F.col('install_date'),'yyyy-MM-dd').cast("timestamp")))
df= df.withColumn('app_install_duration', F.datediff(F.current_date(), df.install_date))

df = df.withColumn('txn_date',to_date(unix_timestamp(F.col('txn_date'),'yyyy-MM-dd HH:mm:ss').cast("timestamp")))

df= df.withColumn('first_txn_duration_after_app_install', F.datediff(df.txn_date, df.install_date))

df.show()

0 个答案:

没有答案