python - 从配置动态构建数据框名称 - PySpark
问题描述
我需要根据配置动态构建最终数据帧名称(加入 final_df 和后缀)。当我运行最后提到的代码时,我收到错误 - “SyntaxError:无法分配给运算符”。但是,如果我将 each["final_df"]+'_'+ each["suffix"] 替换为任何其他名称,它就可以工作。
数据 :
df_source_1 = spark.createDataFrame(
[
(123,10),
(123,15),
(123,20)
],
("cust_id", "value")
)
配置:
config = """
[
{
"source_df":"df_source_1",
"suffix": "new",
"group":["cust_id"],
"final_df": "df_taregt_1"
}
]
"""
代码:
import json
for each in json.loads(config):
print("Before=",each['final_df'] ) # str object
print(each["final_df"]+'_'+ each["suffix"]) # df_taregt_1_new , print statement works
each["final_df"]+'_'+ each["suffix"] = eval(each["source_df"]).groupBy(each["group"]).agg(sum("value")) # Errors out. Here I need to assign the dataframe to df_taregt_1_new
任何人都可以帮忙。
解决方案
你用 dict 编码:
df_dict = {}
df_dict["df_source_1"] = spark.createDataFrame(
[(123, 10), (123, 15), (123, 20)], ("cust_id", "value")
)
for each in json.loads(config):
df_dict[each["final_df"] + "_" + each["suffix"]] = (
df_dict[each["source_df"]].groupBy(each["group"]).agg(sum("value"))
)
您不必使用应该是动态创建的对象,而是使用一个字典来存储所有这些对象及其动态名称。您甚至可以测试您的 dict 以了解对象是否存在。
推荐阅读
- php - Azure 搜索 - PHP 中的 $skip
- xml - 如何使用 XSLT 对 2 个 XML 表执行内连接以获取 1 个嵌套表?
- css - CSS 变换,推/拉周围元素
- r - 删除组内所有 NA 的 ID
- html - Video tag throwing off css-grid layout
- javascript - 根据条件单击提交按钮时更改文本字段值
- google-apps-script - Google Apps 脚本触发器:如何获取计时器时间?
- php - Laravel 对数字不起作用的最小长度验证
- c# - 使用单个用户登录到应用程序服务器上的 SQL Server
- uibutton - UIButton 的 IBDesignable,IBInspectable 变量为零