我的代碼:如何在scala中壓縮以下內容?
val result= rdd.filter(x=> x.get[DateTime]("mytime") > offsetvalue._1 &&
row.get[DateTime]("mytime") <= offsetvalue._2)
我想壓縮像代碼:
val result = rdd.filter(x => myFunction())
where myFunction() {x=> x.get[DateTime]("mytime") > offsetvalue._1 &&
row.get[DateTime]("mytime") <= offsetvalue._2 }
時myFunction是調用它顯示exeception:
org.apache.spark.SparkException: Task not serializable
at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:166) ~[spark-core_2.10-1.2.2.2.jar:1.2.2.2]
at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:158) ~[spark-core_2.10-1.2.2.2.jar:1.2.2.2]
at org.apache.spark.SparkContext.clean(SparkContext.scala:1476) ~[spark-core_2.10-1.2.2.2.jar:1.2.2.2]
at org.apache.spark.rdd.RDD.filter(RDD.scala:300) ~[spark-core_2.10-1.2.2.2.jar:1.2.2.2]
at com.aruba.sparkjobs.apprf.LeaderBoardJob.runJob(LeaderBoardJob.scala:203) ~[ee507b50-011f-42de-8bd5-536ca113d640-2015-09-25T11:11:23.637+05:30.jar:1.0.0-b.3]
如何序列化上面的函數
您可以簡單地將myFun()傳遞給過濾器。 val result = rdd.filter(myFun()),但是您需要修改myFun(),類似於給出x的類型。 – curious
最小化是什麼意思? –
我同意在不同的函數中使用這樣的複雜表達式 - 它可以製作更多可讀的代碼,特別是在一段時間之後回到代碼中。但是,它需要比'myFun'更好的函數名稱! –