PySpark中如何将from_json生成的Column转为单列DataFrame
解决方法
首先明确:from_json返回的是Spark Column表达式,不是可迭代的Python数据集合,直接传给createDataFrame会触发TypeError: Column is not iterable错误——因为Spark无法将Column对象当作数据源使用。
方法1:解析后拆分数组为单行单列DataFrame
如果需要把JSON数组里的每个元素单独成一行,用explode函数展开数组即可:
from pyspark.sql.functions import from_json, explode from pyspark.sql.types import ArrayType, StringType jsonlist = '["a","b","c"]' # 先构建包含原始JSON字符串的临时DataFrame temp_df = spark.createDataFrame([(jsonlist,)], ["json_str"]) # 解析JSON字符串为数组类型列 parsed_df = temp_df.withColumn("items", from_json("json_str", ArrayType(StringType()))) # 展开数组得到单行单列结果 result_df = parsed_df.select(explode("items").alias("item")) result_df.show()
执行后输出:
+----+ |item| +----+ | a| | b| | c| +----+
方法2:保留数组作为单列值
如果不需要拆分数组,只想把整个解析后的数组作为单列内容:
from pyspark.sql.functions import from_json from pyspark.sql.types import ArrayType, StringType jsonlist = '["a","b","c"]' temp_df = spark.createDataFrame([(jsonlist,)], ["json_str"]) result_df = temp_df.select(from_json("json_str", ArrayType(StringType())).alias("item")) result_df.show()
执行后输出:
+---------+ | item| +---------+ |[a, b, c]| +---------+
内容的提问来源于stack exchange,提问作者saviourofdp
相关产品推荐
相关产品推荐

