Apache spark 如何将df中的列数组拆分为新的df?
我有一个包含一些列的数据框架,其中一个是小时数组,我想将这个小时数组拆分为每个索引的新列 例如: 如果我的数组是24小时的,那么我必须逐小时创建一个包含24列的新dfApache spark 如何将df中的列数组拆分为新的df?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个包含一些列的数据框架,其中一个是小时数组,我想将这个小时数组拆分为每个索引的新列 例如: 如果我的数组是24小时的,那么我必须逐小时创建一个包含24列的新df 对于这种情况,您可以尝试使用spark内置函数posexplode、concat、groupBy、pivot 示例: #test dataframe val df=Seq(("rome","escuels",Seq(0,1,2,3,4,5)), ("madrid","farmacia",Seq(0,1,2,
对于这种情况,您可以尝试使用spark内置函数
posexplode、concat、groupBy、pivot
示例:
#test dataframe
val df=Seq(("rome","escuels",Seq(0,1,2,3,4,5)),
("madrid","farmacia",Seq(0,1,2,3,4,5)))
.toDF("city","institute","monday_hours")
df.selectExpr("posexplode(monday_hours) as (p,c)","*") //pos explode gives position and col value
.selectExpr("concat('monday_',p) as m ","c","city","institute")
.groupBy("city","institute")
.pivot("m") //pivot on m column
.agg(first("c")) //get the first value from c column value.
.show()
+------+---------+--------+--------+--------+--------+--------+--------+
| city|institute|monday_0|monday_1|monday_2|monday_3|monday_4|monday_5|
+------+---------+--------+--------+--------+--------+--------+--------+
|madrid| farmacia| 0| 1| 2| 3| 4| 5|
| rome| escuels| 0| 1| 2| 3| 4| 5|
+------+---------+--------+--------+--------+--------+--------+--------+
结果:
我必须在七天内(星期一、星期二、星期三,…)这样做,而且df每天有大约30列没有小时