Spark中将Row类型嵌套列表转换为DataFrame的方法
问题描述
从嵌套JSON文件提取数据时,已通过explode操作将目标数据展开为元素是Row对象的列表,示例结构如下:
[Row(['rrrr644', '0838-60C', '0', None, '2556', None, '{ }', '2875']), Row(['werw522', 'C8FC-DDD', '0', '3762', None, '{ }', '1145']), ...]
需要提取Row内的数据构建结构化DataFrame。
实现方案
根据使用的工具栈选择对应方法即可:
PySpark环境(使用explode算子的常规场景)
先遍历取出每个Row对象中嵌套的列表数据,指定对应列名后直接创建DataFrame:from pyspark.sql import SparkSession # 已有spark会话可跳过初始化步骤 spark = SparkSession.builder.appName("row_convert").getOrCreate() # 假设原始Row列表存储在变量row_list中 # 提取每个Row内嵌套的列表 parse_data = [row[0] for row in row_list] # 按列表元素的顺序定义对应列名 col_names = ["field1", "field2", "field3", "field4", "field5", "field6", "empty_json", "field8"] # 生成DataFrame result_df = spark.createDataFrame(parse_data, schema=col_names)注意:如果不同Row内的列表长度不一致,需要先对缺失位置补None/默认值,否则会触发字段长度不匹配报错
Pandas本地处理环境
取数逻辑和PySpark一致,直接调用Pandas的DataFrame构造方法即可:import pandas as pd parse_data = [row[0] for row in row_list] col_names = ["field1", "field2", "field3", "field4", "field5", "field6", "empty_json", "field8"] result_df = pd.DataFrame(parse_data, columns=col_names)
如果你的Row对象没有嵌套列表,本身是按位置存储值的结构,直接用list(row)就能把单个Row转为普通Python列表,替换上述代码里的row[0]即可。
内容的提问来源于stack exchange,提问作者Turtle3012
相关产品推荐
相关产品推荐

