我不确定您是否可以在PySpark 中动态创建数据框的名称。在 Python 中,你甚至不能 dynamically 分配变量的名称,更不用说 dataframes。
一种方法是创建dataframes 的字典,其中key 对应于每个date,而该字典的value 对应于数据框。
对于 Python: 请参阅此 link,其中有人问过关于名称动态的类似问题。
这是一个小的PySpark 实现 -
from pyspark.sql.functions import col
values = [('2018-01-01','M',100),('2018-02-01','F',100),('2018-03-01','M',100)]
df = sqlContext.createDataFrame(values,['date','gender','balance'])
df.show()
+----------+------+-------+
| date|gender|balance|
+----------+------+-------+
|2018-01-01| M| 100|
|2018-02-01| F| 100|
|2018-03-01| M| 100|
+----------+------+-------+
# Creating a dictionary to store the dataframes.
# Key: It contains the date from my_list.
# Value: Contains the corresponding dataframe.
dictionary_df = {}
my_list = ['2018-01-01', '2018-02-01', '2018-03-01']
for i in my_list:
dictionary_df[i] = df.filter(col('date')==i)
for i in my_list:
print('DF: '+i)
dictionary_df[i].show()
DF: 2018-01-01
+----------+------+-------+
| date|gender|balance|
+----------+------+-------+
|2018-01-01| M| 100|
+----------+------+-------+
DF: 2018-02-01
+----------+------+-------+
| date|gender|balance|
+----------+------+-------+
|2018-02-01| F| 100|
+----------+------+-------+
DF: 2018-03-01
+----------+------+-------+
| date|gender|balance|
+----------+------+-------+
|2018-03-01| M| 100|
+----------+------+-------+
print(dictionary_df)
{'2018-01-01': DataFrame[date: string, gender: string, balance: bigint], '2018-02-01': DataFrame[date: string, gender: string, balance: bigint], '2018-03-01': DataFrame[date: string, gender: string, balance: bigint]}