在Azure Databricks中用Pandas将多列转为单列字典格式
解决方案
原代码问题分析
getFormsColumnsName函数中引用了未定义的cols变量,实际应该使用你定义的baseCols- 使用
df[formColumns].values.tolist()仅能生成纯值列表,无法将列名(问题标题)与回答对应成字典结构,这是导致异常输出的核心原因
方法1:PySpark 实现(适配Azure Databricks大数据场景)
Azure Databricks默认使用PySpark DataFrame,以下是分布式环境下的高效实现:
from pyspark.sql.functions import create_map, lit, col # 定义保留的基础列 baseCols = ['id', 'name', 'email'] # 筛选出所有问题列(排除基础列) formColumns = [col_name for col_name in df.columns if col_name not in baseCols] # 构建键值对映射:将每个问题列名作为字典的键,列值作为对应的值 map_expression = create_map(*[lit(col) for pair in [(col, col) for col in formColumns] for col in pair]) # 生成最终结果DataFrame result_df = df.select(*baseCols, map_expression.alias("responses")) display(result_df)
方法2:Pandas 实现(适合小数据集场景)
如果你的数据量较小,也可以使用Pandas DataFrame处理:
baseCols = ['id', 'name', 'email'] formColumns = [col_name for col_name in df.columns if col_name not in baseCols] # 对每行生成包含问题标题与回答的字典 df['responses'] = df[formColumns].apply(lambda row: row.to_dict(), axis=1) # 仅保留需要的列 result_df = df[baseCols + ['responses']] display(result_df)
内容的提问来源于stack exchange,提问作者Flávio Ravier
相关产品推荐
相关产品推荐

