问题描述
以下代码用于提取给定父列的子数据框。
mdf.selectExpr(mdf.schema.map(c => if(c.dataType.typeName =="struct") s"${c.name}.*" else c.name):_*)
我们如何使用以下模式(parent_column_name +“ _” + child_column_name)重命名列名
scala> :paste
// Entering paste mode (ctrl-D to finish)
import org.apache.spark.sql.{Column,DataFrame,Row}
import org.apache.spark.sql.functions.from_json
implicit class DFHelper(inDF: DataFrame) {
import inDF.sparkSession.implicits._
def fromJson(columns:Column*):DataFrame = {
val schemas = columns.map(column => (column,inDF.sparkSession.read.json(inDF.select(column).as[String]).schema))
val mdf = schemas.foldLeft(inDF)((df,schema) => {
df.withColumn(schema._1.toString(),from_json(schema._1,schema._2))
})
mdf.selectExpr(mdf.schema.map(c => if(c.dataType.typeName =="struct") s"${c.name}.*" else c.name):_*)
}
}
// Exiting paste mode,now interpreting.
import org.apache.spark.sql.{Column,Row}
import org.apache.spark.sql.functions.from_json
defined class DFHelper
上面是任何数据框的动态生成的模式。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)