Scala中如何从嵌套JSON提取指定列生成Spark DataFrame
从嵌套JSON提取指定列生成Spark DataFrame
处理步骤
- 展开数组列
原始DataFrame中的objects是数组类型,需要先使用explode函数将数组内的每个元素拆分为单独行,才能访问元素内部的嵌套字段:
import org.apache.spark.sql.functions.explode // 展开objects数组,将每个元素转为单独行的struct列 val explodedDF = df.select(explode($"objects").alias("obj"))
- 提取嵌套字段
展开后的obj是一个结构体,包含caucus字段以及嵌套的person结构体。通过.操作符直接访问嵌套字段,并为列设置目标名称:
val resultDF = explodedDF.select( $"obj.person.name".alias("Name"), $"obj.person.party".alias("Party"), $"obj.caucus".alias("Caucus") )
- 查看结果
执行resultDF.show()即可得到目标结构的DataFrame:
+-----+-----------+-----------+ | Name| Party| Caucus| +-----+-----------+-----------+ | Mary|Green Party|Progressive| +-----+-----------+-----------+
合并写法
也可以将两步合并为一行代码,简化操作:
import org.apache.spark.sql.functions.explode val resultDF = df.select(explode($"objects").alias("obj")) .select( $"obj.person.name".alias("Name"), $"obj.person.party".alias("Party"), $"obj.caucus".alias("Caucus") )
内容的提问来源于stack exchange,提问作者Stu
相关产品推荐
相关产品推荐

