You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark DataFrame如何基于指定Schema创建多行数据?

如何创建多行数据的Spark DataFrame或追加数据行

方案一:创建时直接传入多行数据

直接把所有数据行打包进一个列表,作为createDataFrame的data参数即可,不需要单独处理单条数据。

示例代码

# 沿用你定义好的Schema
my_schema = StructType([
    StructField('uid', StringType(), True),
    StructField('test_id', StringType(), True),
    StructField("struct_ids", ArrayType(
        StructType([
                StructField("st", IntegerType(), True),
                StructField("mt", IntegerType(), True),
            ])
        ) )
 ])

# 准备多行数据列表
multi_row_data = [
    {'uid': 'test',
     'test_id': 'test',
     'struct_ids': [{'st': 1234, 'mt': 1111}, {'st': 6789, 'mt': 2222}]},
    {'uid': 'test2',
     'test_id': 'test2',
     'struct_ids': [{'st': 3333, 'mt': 114411}, {'st': 333, 'mt': 444}]}
]

# 创建包含多行数据的DataFrame
df = spark.createDataFrame(data=multi_row_data, schema=my_schema)

方案二:给已有DataFrame追加数据行

如果已经有了初始的单行DataFrame,可以先把新数据做成一个新的单行DataFrame,再用unionByName(推荐,避免列顺序不匹配问题)合并。

示例代码

# 你的初始单行DataFrame创建代码
my_data = {'table_test': {'uid': 'test',
                          'test_id': 'test',
                          'struct_ids': [{'st': 1234, 'mt': 1111}, {'st': 6789, 'mt': 2222}]}}
df = spark.createDataFrame(data=[my_data['table_test']], schema=my_schema)

# 准备要追加的新数据行
new_row_data = {'uid': 'test2',
                'test_id': 'test2',
                'struct_ids': [{'st': 3333, 'mt': 114411}, {'st': 333, 'mt': 444}]}

# 把新数据做成单行DataFrame
new_df = spark.createDataFrame(data=[new_row_data], schema=my_schema)

# 合并两个DataFrame(unionByName会按列名匹配,比union更稳妥)
df = df.unionByName(new_df)

注意点

  • 用union合并时,两个DataFrame的列顺序必须完全一致;unionByName不要求列顺序,按列名匹配,更安全。
  • 追加的新数据Schema必须和原DataFrame完全一致,否则会报错。

内容的提问来源于stack exchange,提问作者Blue Clouds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:06:02