Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何将df中的列数组拆分为新的df?_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 如何将df中的列数组拆分为新的df?

Apache 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,

我有一个包含一些列的数据框架,其中一个是小时数组,我想将这个小时数组拆分为每个索引的新列

例如:

如果我的数组是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,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列没有小时