我有一个这样的数据透视表
//source rdd looks like this
val seq1=Seq((1,2,3),(4,5,6),(7,8,9),.....)
val rdd1=sc.parallelize(seq1)
//Single compute thread
class MyException extends Exception
class CalThread(lastResult:Boolean) extends Callable[Boolean]{
override def call(): Boolean = {
try{
val rdd2=rdd1.map{x=>(x._1,(x._2,x._3))}
val rdd3=rdd2.reduceByKey{
(a,b)=>{
if(a._1!=b._1)
throw new MyException
else
a
}
}
println(rdd3.count)
false
}catch{
case e:Exception=>{
true
}
}
}
}
//how to submit task
val exec =new ThreadPoolExecutor(1,1,0
,TimeUnit.SECONDS,new LinkedBlockingQueue[Runnable]())
var f:Future[Boolean]=null
var firstCal=true
while (flag){
if(firstCal){
f = exec.submit(new CalThread(false))
firstCal=false
}
else{
f = exec.submit(new CalThread(f.get()))
}
}
我想创建一个数据透视表来显示月份差异,所以可以这样:
A | 01/01/2001 | 01/02/2001
A | 01/01/2001 | 01/02/2008
B | 01/01/1994 | 01/11/2015
B | 01/01/2006 | 01/02/2014
B | 11/01/2016 | 19/07/2018
C | 01/03/2006 | 21/02/2014
C | 01/06/2016 | 01/05/2017
...
或仅仅几个月:
A | 01/01/2001 | 01/02/2001 | 1
A | 01/01/2001 | 01/02/2008 | 85
etc...
当然我可以只使用A | 1
A | 85
etc...
,但是我也想添加一个切片器,以便可以过滤=DATEDIF(date1,date2,"M")
,这意味着行数不是固定的,所以我不能仅仅添加公式。
有没有很好的方法可以做到这一点?
答案 0 :(得分:2)
您可以在数据透视表本身内部计算字段,然后就可以使用切片器
导航:
数据透视表工具>>分析>>字段项和集合>>计算字段
然后粘贴您的datedif公式
{
[...]
onClickFunction: function (event){
[...]
gon.watch("nodes", {}, function(){})
}
},
希望有帮助!