如何解决在spark scala中重命名列的子名称s“ $ {col.name}*”
以下代码用于提取给定父列的子数据框。
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 举报,一经查实,本站将立刻删除。