Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
spark scala转换数据帧/rdd_Scala_Apache Spark - Fatal编程技术网

spark scala转换数据帧/rdd

spark scala转换数据帧/rdd,scala,apache-spark,Scala,Apache Spark,我有一个CSV文件,如下所示 PK,key,Value 100,col1,val11 100,col2,val12 100,idx,1 100,icol1,ival11 100,icol3,ival13 100,idx,2 100,icol1,ival21 100,icol2,ival22 101,col1,val21 101,col2,val22 101,idx,1 101,icol1,ival11 101,icol3,ival13 101,idx,3 101,icol1,ival31 101

我有一个CSV文件,如下所示

PK,key,Value
100,col1,val11
100,col2,val12
100,idx,1
100,icol1,ival11
100,icol3,ival13
100,idx,2
100,icol1,ival21
100,icol2,ival22
101,col1,val21
101,col2,val22
101,idx,1
101,icol1,ival11
101,icol3,ival13
101,idx,3
101,icol1,ival31
101,icol2,ival32
我想将此转换为以下内容

PK,idx,key,Value
100,,col1,val11
100,,col2,val12
100,1,idx,1
100,1,icol1,ival11
100,1,icol3,ival13
100,2,idx,2
100,2,icol1,ival21
100,2,icol2,ival22
101,,col1,val21
101,,col2,val22
101,1,idx,1
101,1,icol1,ival11
101,1,icol3,ival13
101,3,idx,3
101,3,icol1,ival31
101,3,icol2,ival32

基本上,我想在输出数据框中创建一个名为idx的新列,该列将填充与key=idx,value=“n”后面的行相同的值“n”

这里有一种使用Spark>=2.0.0的
last
窗口功能的方法:

import org.apache.spark.sql.functions.{last,when,lit}
导入org.apache.spark.sql.expressions.Window
val w=窗口之间的Window.partitionBy(“PK”).rowsBetween(Window.unbounddpreceiding,0)
df.withColumn(“idx”,当($“key”==点亮(“idx”),$“Value”))
.withColumn(“idx”,last($“idx”,true)。超过(w))
.orderBy($“PK”)
显示
输出:

+---+-----+------+----+
| PK|  key| Value| idx|
+---+-----+------+----+
|100| col1| val11|null|
|100| col2| val12|null|
|100|  idx|     1|   1|
|100|icol1|ival11|   1|
|100|icol3|ival13|   1|
|100|  idx|     2|   2|
|100|icol1|ival21|   2|
|100|icol2|ival22|   2|
|101| col1| val21|null|
|101| col2| val22|null|
|101|  idx|     1|   1|
|101|icol1|ival11|   1|
|101|icol3|ival13|   1|
|101|  idx|     3|   3|
|101|icol1|ival31|   3|
|101|icol2|ival32|   3|
+---+-----+------+----+

代码首先创建一个名为
idx
的新列,当
key==idx
null
时,该列包含
value
的值。然后在定义的窗口上检索
last
observed
idx

酷。谢谢,很好用。出于某种原因,$“column\u name”对我不起作用,但col(“column\u name”)可以很好地工作。