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

如何将含列表值的Python字典转换为多行PySpark DataFrame

将字典转换为指定结构的PySpark DataFrame

步骤1:初始化SparkSession

先创建PySpark的核心会话对象,这是所有操作的基础:

from pyspark.sql import SparkSession
from pyspark.sql.functions import arrays_zip, explode, col

spark = SparkSession.builder.appName("dict_to_spark_df").getOrCreate()

步骤2:定义字典并生成初始DataFrame

把目标字典转换成单行的PySpark DataFrame:

my_dict = {'z': 'some_string', 'y':'some_other_string', 'a': [1,2,3], 'b': [4,5,6]}
# 生成仅含一行的初始DataFrame
df = spark.createDataFrame([my_dict])

步骤3:拆分列表列并保留重复值

利用arrays_zip把长度匹配的列表列a和b按位置配对,再用explode将配对后的数组拆分成多行,最后提取需要的列:

# 打包列表列→拆分成多行→提取目标列
df_result = df.withColumn("zipped_cols", arrays_zip(col("a"), col("b"))) \
              .withColumn("zipped_cols", explode(col("zipped_cols"))) \
              .select(
                  col("zipped_cols.a").alias("a"),
                  col("zipped_cols.b").alias("b"),
                  col("z"),
                  col("y")
              )

查看最终结果

执行df_result.show()就能得到你需要的结构:

+---+---+-----------+-----------------+
|  a|  b|          z|                y|
+---+---+-----------+-----------------+
|  1|  4|some_string|some_other_string|
|  2|  5|some_string|some_other_string|
|  3|  6|some_string|some_other_string|
+---+---+-----------+-----------------+

补充说明

这个方法适用于列表列长度一致的场景,arrays_zip会按索引将两个列表的元素一一绑定,explode则把每一组绑定元素拆成单独一行,非列表类型的z、y值会自动在每一行重复显示。如果后续遇到列表长度不一致的情况,可以根据需求补全短列表或过滤不匹配的行来调整逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:07:18