2015-02-12 83 views
0

我有一些代碼行:斯卡拉 - 找到類型沒有即時轉換器:scala.Tuple5

import org.joda.time._ 
import org.joda.time.format._ 
val sampleDate = new DateTime(2015, 1, 1, 0, 0) 

所以我得到一個錯誤:

java.lang.IllegalArgumentException: No instant converter found for type: scala.Tuple5 
    at org.joda.time.convert.ConverterManager.getInstantConverter(ConverterManager.java:165) 
    at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:169) 
    at org.joda.time.DateTime.<init>(DateTime.java:168) 
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:19) 
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:24) 
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:26) 
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:28) 
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:30) 
    at $iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:32) 
    at $iwC$$iwC$$iwC$$iwC.<init>(<console>:34) 
    at $iwC$$iwC$$iwC.<init>(<console>:36) 
    at $iwC$$iwC.<init>(<console>:38) 
    at $iwC.<init>(<console>:40) 
    at <init>(<console>:42) 
    at .<init>(<console>:46) 
    at .<clinit>(<console>) 
    at .<init>(<console>:7) 
    at .<clinit>(<console>) 
    at $print(<console>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:852) 
    at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1125) 
    at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:674) 
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:705) 
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:669) 
    at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:828) 
    at org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:873) 
    at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:785) 
    at org.apache.spark.repl.SparkILoop.processLine$1(SparkILoop.scala:628) 
    at org.apache.spark.repl.SparkILoop.innerLoop$1(SparkILoop.scala:636) 
    at org.apache.spark.repl.SparkILoop.loop(SparkILoop.scala:641) 
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply$mcZ$sp(SparkILoop.scala:968) 
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:916) 
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:916) 
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135) 
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:916) 
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:1011) 
    at org.apache.spark.repl.Main$.main(Main.scala:31) 
    at org.apache.spark.repl.Main.main(Main.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

我不知道爲什麼我得到這個錯誤,雖然這個網站: http://joda-time.sourceforge.net/api-release/org/joda/time/DateTime.html 我看到這個構造器是正確的....

DateTime 

public DateTime(int year, 
       int monthOfYear, 
       int dayOfMonth, 
       int hourOfDay, 
       int minuteOfHour) 
Constructs an instance from datetime field values using ISOChronology in the default time zone. 
Parameters: 
year - the year 
monthOfYear - the month of the year 
dayOfMonth - the day of the month 
hourOfDay - the hour of the day 
minuteOfHour - the minute of the hour 
Since: 
2.0 

謝謝!

+2

構造函數不是取6而是取5嗎? – LynxZh 2015-02-12 08:33:13

+0

對不起,這是一個構造器日期時間 公開日期時間(年整型, INT monthOfYear, INT請將dayOfMonth, INT HOUROFDAY, INT minuteOfHour) – 2015-02-12 08:55:01

+0

看來,編譯器治療tuple5內的支架,你可以貼足代碼段來查看是否有任何格式錯誤? – LynxZh 2015-02-12 09:12:27

回答

1

你的代碼與2.7版本的喬達時間,但它不會與像1.6一些較舊的工作:

2.7: DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour) 
1.6: DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, int millisOfSecond) 

的API被改變。

我REPL:

scala> val sampleDate = new DateTime(2015, 1, 1, 0, 0) 
warning: Class org.joda.convert.FromString not found - continuing with a stub. 
warning: Class org.joda.convert.ToString not found - continuing with a stub. 
warning: Class org.joda.convert.ToString not found - continuing with a stub. 
warning: Class org.joda.convert.FromString not found - continuing with a stub. 
warning: Class org.joda.convert.ToString not found - continuing with a stub. 
sampleDate: org.joda.time.DateTime = 2015-01-01T00:00:00.000+07:00 

如果我嘗試一些不恰當的參數:

scala> val sampleDate = new DateTime(2015, 1, 1, 0) 
java.lang.IllegalArgumentException: No instant converter found for type: scala.Tuple4 

附:喬達時間罐被放置在lib_managed\jars文件夾內。所以你可以檢查你的版本。我分別使用spark-1.2.0和joda-time-2.1.0,因此您應該至少使用Spark的1.2.0版本update來使用新的API。