pyspark - 在 pyspark 数据框中添加一个组合两列的新列
问题描述
我有一个带有两个日期列和其他几个列的 pyspark 数据框。
+-------+-----------+----------+----------+--
| ID| date1| date2 | othercols|
| 1 | 2019-04-01|2019-05-01| 345 |
| 2 | 2019-05-01|2019-06-01| 334 |
| 3 | 2019-06-01|2019-05-01| 324 |
我想将这两个日期列合并到一个新列中,以便为每个条目复制行。我还想使用将日期添加到新列的条件,例如 date1 <= given_date & date2 <= given_date 等等。生成的数据框应如下所示:
+-------+----------+----------+----------+----------+--
| ID| date1| date2| all_dates| othercols|
| 1 |2019-04-01|2019-05-01|2019-04-01| 345 |
| 1 |2019-04-01|2019-05-01|2019-05-01| 345 |
| 2 |2019-05-01|2019-06-01|2019-05-01| 334 |
| 2 |2019-05-01|2019-06-01|2019-06-01| 334 |
| 3 |2019-06-01|2019-05-01|2019-06-01| 324 |
| 3 |2019-06-01|2019-05-01|2019-05-01| 324 |
基本上是特定 id 的所有日期,保持其他列的信息不变。
通过对堆栈溢出的搜索,我可以找到将列组合到新列并在新列中创建数组或列表的答案。对union的任何搜索都会导致不同数据框的联合等。
如果有人可以在这里帮助我,我将不胜感激。
解决方案
创建一个新列并将其分解为新行:
import pyspark.sql.functions as F
df = df.withColumn("date_array", F.array(df.date1, df.date2)).withColumn("all_dates", F.explode("date_array"))
推荐阅读
- vue.js - Vuetify 底部导航在硬刷新后不会删除路由更改时的活动状态
- c# - 允许 OutputDataReceived 从外部调用的程序中获取输出
- docker - Docker compose 和 volumes_from 按容器名称
- numpy - 如何迭代地识别 ndarray 中的 np.nan 值
- sql - 使用 Sql Server,如何查询 json 格式列中的元素?
- c++ - 不存在关于 clang 的预期歧义错误
- php - 如何使用 laravel 和 mysql 数据库获取数组中的数组?
- python - Scipy ttest_ind 置换测试由 equal_var 参数更改?
- three.js - Three.js r132 'getDirectionalDirectLightIrradiance' & 'getPointDirectLightIrradiance' 找不到匹配的重载函数错误
- powershell - Can I filter 2 different CommandType using Poweshell?