如何将JSON格式的单行PySpark DataFrame拆分为多行?
解决方案
你读取到的full_text列实际是JSON格式的字符串,可直接通过PySpark内置的JSON解析、展平函数完成转换,全程无需转pandas,执行效率更高。
完整可运行代码
from pyspark.sql import functions as F from pyspark.sql.types import MapType, StringType # 读取原始数据 raw_df = spark.read.json("dbfs:/FileStore/tables/json_twitter.json").select("full_text") # 定义匹配数据格式的JSON schema:键值均为字符串的映射结构 json_schema = MapType(StringType(), StringType()) # 解析JSON、提取内容、展平为每行一个词的标准结构 result_df = raw_df \ .withColumn("text_map", F.from_json(F.col("full_text"), json_schema)) \ .withColumn("word_list", F.map_values(F.col("text_map"))) \ .withColumn("word", F.explode(F.col("word_list"))) \ .select("word")
逻辑说明
- 自定义的
MapTypeschema适配你拿到的{"0": "Hello", "1": "Tweet","2": "Bye"}格式JSON from_json函数将字符串格式的JSON转换为Spark可直接操作的映射类对象map_values提取映射中所有的文本内容,生成数组类型的列explode函数将数组中的每一个元素单独拆分为一行,最终得到每行一个词的结果
结果验证
执行result_df.show()即可看到预期输出:
+-----+ | word| +-----+ |Hello| |Tweet| | Bye| +-----+
内容的提问来源于stack exchange,提问作者FHSilva
相关产品推荐
相关产品推荐

