【发布时间】:2019-05-28 07:52:24
【问题描述】:
我正在尝试访问特定 Int 列“数字”的每一行,以跟踪数字列中的上一行和下一行。作为新手,尝试了以下几个示例,但我无法解决它。我在网上查了多个来源,但无法纠正。我确实认为列表/集合可能有效,但我不知道如何实现它。有人可以帮助我吗?
我尝试了以下方法,但出现“Int 不接受参数”错误
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.Row
val df = df_new.select($"tin", $"year",$"mnth",
struct($"date_begin", $"date_end",$"start",$"end",$"usage",$"numbers")
as "data").rdd.groupBy(x => (x.getString(0),x.getInt(1),x.getInt(2)))
.map( x => {
val tin = x(0).getString(0)
val year = x(0).getInt(1)
val month = x(0).getInt(2)
val use = x(0).getStruct(3).getFloat(4)
var sum:Float = 0.0F
val nums = x(0).getStruct(3).getInt(5)
for (i <- x.indices)
{
val v = x(i).getStruct(3)
val n = x(i).getStruct(3).getInt(5)
var next = n(i+1)
var prev = n(i-1)
if(nums == next || nums == prev)
{
sum = sum + v.getFloat(4)
}
else
{
sum
}
}
(tin,year,nums)
}
)
我需要获取如下数据
numbers next prev
0 1 null
1 0 0
0 1 1
1 1 0
1 0 1
0 1 1
1 1 0
1 1 1
1 1 1
1 0 1
0 null 1
【问题讨论】:
-
在哪一栏?
-
@pme 嗨,在结构内的“数字”列上,在描述中也指定了相同的内容
-
@pme 嗨,您能否提出任何可能的方法来实现这一点,提前谢谢您。
-
是这条线:
val nums = x(0).getStruct(3).getInt(5)给出了错误(对不起,我没有安装 apache spark 的项目) -
@pme 我主要需要知道如何遍历 scala 中的特定列,这里的列是“数字”,就像我需要将当前值与上一个值和当前值与下一个值进行比较一个特定的列,例如 x(i+1) 和 x(i-1)
标签: scala apache-spark rdd