2017-02-21 7 views
1

私は、Pascal BugnionのScala for Data Scienceのコードに従っています。トランザクションjava.text.ParseException:解読不可能な日付: "06-DEC-11"

case class Transaction(
id:Option[Int], // unique identifier 
candidate:String, // candidate receiving the donation 
contributor:String, // name of the contributor 
contributorState:String, // contributor state 
contributorOccupation:Option[String], // contributor job 
amount:Long, // amount in cents 
date:Date // date of the donation 
) 

defined class Transaction 

を表現する ファーストクラスは、それから私は私が最初に5を印刷しようとすると

scala> val ohioData = FECData.loadOhio 
ohioData: FECData = [email protected] 

FECDataオブジェクトが属性取引

scala> val ohioTransactions = ohioData.transactions 
ohioTransactions: Iterator[Transaction] = non-empty iterator 

を持ってFEDataシングルトンオブジェクトの助けを借りて、DATをロードしました取引

scala> ohioTransactions.take(5).foreach(println) 
java.text.ParseException: Unparseable date: "06-DEC-11" 
    at java.text.DateFormat.parse(DateFormat.java:366) 
    at FECData$$anonfun$1.apply(FECData.scala:26) 
    at FECData$$anonfun$1.apply(FECData.scala:16) 
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:370) 

のは、CSVファイルの最初の5行 candidate_idを見て、候補者、contributor_name、contributor_state、contributor_occupation、金額、日付

P80000748,"Paul, Ron","BROWN, TODD W MR.",OH,ENGINEER,50.0,06-DEC-11 
P80000748,"Paul, Ron","DIEHL, MARGO SONJA",OH,RETIRED,25.0,06-DEC-11 
P80000748,"Paul, Ron","KIRCHMEYER, BENJAMIN",OH,COMPUTER PROGRAMMER,201.2,06-DEC-11 
P80003338,"Obama, Barack","KEYES, STEPHEN",OH,HR EXECUTIVE/ATTORNEY,100.0,30-SEP-11 
P80003338,"Obama, Barack","MURPHY, MIKE W",OH,MANAGER,50.0,26-SEP-11 

なぜを見てみましょうか?

+0

日付を解析できない可能性が高いというのは、フォーマットが認識されない可能性が高いためです。 – Arqan

+0

例外を見てみましょう.2つのことが表示されます: 'DateFormat.parse(...)'が例外をスローしていて、 'Unparseable date:" 06-DEC-11 "'とメッセージが表示されます。これは、日付が使用されている日付の形式と一致していないことを示しています。使用されているものをチェックし、形式または日付を調整します。 – Thomas

+0

@Thomas私の編集を見て、ファイルの最初の行が表示されます! – MotaF

答えて

3

問題は、FECDatadateParserと定義されていることです。new SimpleDateFormat("DD-MMM-YY")です。

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#SimpleDateFormat(java.lang.String)によれば、デフォルトロケールに対して与えられたパターンとデフォルトの日付フォーマット記号を用いSimpleDateFormatを構築します。

デフォルトのロケール(ご使用のJVMの)がLocale.ENGLISHではないため、DECの部分が"06-DEC-11"で正しく解析されないという問題があります。

FECDataにパッチを適用するだけで、private val dateParser = new SimpleDateFormat("DD-MMM-YY")private val dateParser = new SimpleDateFormat("DD-MMM-YY", java.util.Locale.ENGLISH)に置き換えてください。

Ref。 Localehttps://docs.oracle.com/javase/7/docs/api/java/util/Locale.html

関連する問題