Following transformation helped:
val renamedDf = backfillDf.withColumnRenamed("pf", "data").withColumnRenamed("cid", "profileId")
val cstColsSeq = renamedDf.columns.filter(c => c.endsWith("data")).map(f => { col(f) }).toSeq
var cstMapCol: Column = org.apache.spark.sql.functions.struct(cstColsSeq: _*)
renamedDf.withColumn("profile", cstMapCol).drop("data").printSchema