json - 由于打印后显示的模式不正确,无法展平嵌套的 json
问题描述
我有一个 JSON 数据集,如下所示:
我使用以下方法将其展平:
def flattenDataframe(df: DataFrame): DataFrame = {
//getting all the fields from schema
val fields = df.schema.fields
val fieldNames = fields.map(x => x.name)
//length shows the number of fields inside dataframe
val length = fields.length
for (i <- 0 to fields.length - 1) {
val field = fields(i)
val fieldtype = field.dataType
val fieldName = field.name
fieldtype match {
case arrayType: ArrayType =>
val fieldName1 = fieldName
val fieldNamesExcludingArray = fieldNames.filter(_ != fieldName1)
val fieldNamesAndExplode = fieldNamesExcludingArray ++ Array(s"explode_outer($fieldName1) as $fieldName1")
//val fieldNamesToSelect = (fieldNamesExcludingArray ++ Array(s"$fieldName1.*"))
val explodedDf = df.selectExpr(fieldNamesAndExplode: _*)
return flattenDataframe(explodedDf)
case structType: StructType =>
val childFieldnames = structType.fieldNames.map(childname => fieldName + "." + childname)
val newfieldNames = fieldNames.filter(_ != fieldName) ++ childFieldnames
val renamedcols = newfieldNames.map(x => (col(x.toString()).as(x.toString().replace(".", "_").replace("$", "_").replace("__", "_").replace(" ", "").replace("-", ""))))
val explodedf = df.select(renamedcols: _*)
return flattenDataframe(explodedf)
case _ =>
}
}
df
}
展平后,我得到以下架构:
但是,我得到了data
列,string
但它应该像array of the struct
. 那么我哪里错了?我正在使用带有 scala 的 Spark。
解决方案
推荐阅读
- html - 为什么我在表格单元格中得到 NaN?(Python - 熊猫)
- javascript - 在 JS 中处理成功
- python - TypeError:“str”对象不能解释为整数,可能是字节字符串错误?
- python - 二叉解析树表示的字符串列表
- html - 正则表达式提取2条信息
- android - OnClickListener RecyclerView
- javascript - 对于一组实例,对于每个实例,如何通过该方法的名称调用某个方法?
- python - 分组条件python
- python - 如何使用 Pandas 修复 python 脚本中 py2app 引发的错误
- python - 如何为任意分布生成相关数据