python - 如何使用 pyspark 创建一个包含大量列和日期数据的数据框?
问题描述
我们在使用pyspark创建数据框的时候,通常是这样使用的:
myItems=spark.createDataFrame([(1,'a'),
(2,'c')],
['id','item'])
每一行都是数据框中的一行。但在这里,我需要创建一个数据框,包括 4 个组和日期。例如:
myItems=spark.createDataFrame([(1,2019-01-01',0),
(1,2019-01-02',0),
......
(1,2019-01-31',0),
(2,'2019-01-01',0),
......
(2,'2019-01-31',0),
data about group 3,
data about group 4],
['group','date','value'])
我需要生成 4 个组:1、2、3、4。对于每个组,都有一个从 2019-01-01 到 2019-01-31 的日期列。值全部为 0。
所以,我想我需要在这里使用一些迭代。我该怎么做?
解决方案
您可以使用普通 python 迭代创建tuples
。(group,date,value)
下面的代码相当通用,几乎适用于所有日期和您想要创建的任意数量的组。只需更改变量num_of_groups
,以符合您的要求start_date
。end_date
# Number of groups you want to create, starting with 1.
num_of_groups=4
# Requisite packages to import for doing the iteration on the dates.
from datetime import date, timedelta
# Initialize start and end date.
start_date = date(2019, 1, 1)
end_Date = date(2019, 1, 31)
delta = end_Date - start_date
您可以使用datetime
Python 库来获取日期中的日期format
,您可以在该日期上进行迭代以获取连续日期并最终用于将日期strftime
转换date
为所需的string
格式。
# This will store the list of consecutive dates from start to end date.
list_dates=[]
for i in range(delta.days + 1):
list_dates = list_dates + [(start_date + timedelta(i)).strftime("%d-%m-%Y")]
print(list_dates)
['01-01-2019','02-01-2019','03-01-2019',.....'29-01-2019','30-01-2019','31-01-2019']
使用嵌套list comprehensions
来创建上面提到的元组列表。
myValues=[(group,date,0) for group in range(1,num_of_groups+1) for date in list_dates]
print(myValues)
[(1, '01-01-2019', 0), (1, '02-01-2019', 0), ... (4, '30-01-2019', 0), (4, '31-01-2019', 0)]
最后,创建 DataFrame。
myItems=spark.createDataFrame(myValues,['group','date','value'])
myItems.show(200)
+-----+-----------+-----+
|group| date|value|
+-----+----------+------+
| 1| 01-01-2019| 0|
| 1| 02-01-2019| 0|
| 1| 03-01-2019| 0|
| 1| 04-01-2019| 0|
| 1| 05-01-2019| 0|
.
.
.
| 4| 28-01-2019| 0|
| 4| 29-01-2019| 0|
| 4| 30-01-2019| 0|
| 4| 31-01-2019| 0|
+-----+-----------+-----+
推荐阅读
- java - HTML:无法在 html 报告中查看 base64 图像
- asp.net - 从代码隐藏访问用户控件属性
- javascript - vue js html中基于json数据动态创建Form?提供小提琴
- c# - 在给定时间后刷新数据集并更新标签 + SQL
- node.js - 从 jwt Express 应用程序获取用户名
- r - 锁定 data.table 表的内容
- php - 使用 Validator 在 Laravel 中验证用户输入
- c# - UWP - 向我的网格视图添加标题行
- python - 我可以直接在 s3 上上传图像而不保存在本地文件夹中吗?
- batch-file - 如何从 winrar 文件 cli 中读取评论部分