如何在PySpark中展平Row对象并转换指定字典结构?
解决方案
嘿,这个转换需求很容易实现,咱们用Python的字典推导式搭配列表推导式就能快速搞定,给你几种实用的方法:
方法1:直接提取Row对象属性
这是最直观的方式,因为你明确知道Row对象有cola和colb两个属性,直接遍历提取就行:
# 假设你的原始字典是这个 original_dict = { 1016070000000: [Row(cola=53273831, colb=1197), Row(cola=15245438, colb=1198)], 10160700000201: [Row(cola=53273831, colb=1198)] } # 转换逻辑 converted_dict = { key: [[row.cola, row.colb] for row in rows] for key, rows in original_dict.items() }
解释一下:我们遍历原字典的每一个键值对,对于每个键对应的Row对象列表,用列表推导式把每个Row的cola和colb值拿出来组成子列表,最终生成你要的纯列表结构字典。
方法2:利用Row对象的字典转换(通用场景)
如果你的Row对象是类似namedtuple或者数据库查询返回的Row(比如SQLAlchemy、psycopg2的Row),它通常支持_asdict()方法转换成字典,这种方式更通用,哪怕属性名有变化也容易调整:
converted_dict = { key: [[row._asdict()['cola'], row._asdict()['colb']] for row in rows] for key, rows in original_dict.items() }
方法3:封装成函数复用
如果需要多次进行这种转换,可以把逻辑封装成函数,方便调用:
def transform_row_dict(original_dict): return { key: [[row.cola, row.colb] for row in rows] for key, rows in original_dict.items() } # 使用示例 result = transform_row_dict(original_dict) print(result) # 输出就是你要的格式:{1016070000000: [[53273831, 1197], [15245438, 1198]], 10160700000201: [[53273831, 1198]]}
这些方法都能完美实现你想要的转换,只要你的Row对象能正常访问cola和colb属性就没问题~
内容的提问来源于stack exchange,提问作者Nithyananda Shetty
相关产品推荐
相关产品推荐

