2017-06-05 1 views
0

Je suis nouveau à scala et java tout à fait et en essayant d'exécuter un code de producteur d'échantillon. Tout ce qu'il fait est, prend quelques produits bruts et référents stockés dans des fichiers CSV et utilise rnd pour générer un journal aléatoire. À la suite de mon code:Log producteur objet dans Scala

object LogProducer extends App { 
//WebLog config 
val wlc = Settings.WebLogGen 

val Products = scala.io.Source.fromInputStream(getClass.getResourceAsStream("/products.csv")).getLines().toArray 
val Referrers = scala.io.Source.fromInputStream(getClass.getResourceAsStream("/referrers.csv")).getLines().toArray 
val Visitors = (0 to wlc.visitors).map("Visitors-" + _) 
val Pages = (0 to wlc.pages).map("Pages-" + _) 

val rnd = new Random() 
val filePath = wlc.filePath 

val fw = new FileWriter(filePath, true) 

//adding randomness to time increments for demo 
val incrementTimeEvery = rnd.nextInt(wlc.records - 1) + 1 

var timestamp = System.currentTimeMillis() 
var adjustedTimestamp = timestamp 

for (iteration <- 1 to wlc.records) { 
    adjustedTimestamp = adjustedTimestamp + ((System.currentTimeMillis() - timestamp) * wlc.timeMultiplier) 
timestamp = System.currentTimeMillis() 
    val action = iteration % (rnd.nextInt(200) + 1) match { 
    case 0 => "purchase" 
    case 1 => "add_to_cart" 
    case _ => "page_view" 
    } 

    val referrer = Referrers(rnd.nextInt(Referrers.length - 1)) 
    val prevPage = referrer match { 
    case "Internal" => Pages(rnd.nextInt(Pages.length - 1)) 
    case _ => "" 
    } 

val visitor = Visitors(rnd.nextInt(Visitors.length - 1)) 
val page = Pages(rnd.nextInt(Pages.length - 1)) 
val product = Products(rnd.nextInt(Products.length - 1)) 

val line = s"$adjustedTimestamp\t$referrer\t$action\t$prevPage\t$visitor\t$page\t$product\n" 
fw.write(line) 

if (iteration % incrementTimeEvery == 0) { 
    //os.flush() 
    println(s"Sent $iteration messages!") 
    val sleeping = rnd.nextInt(incrementTimeEvery * 60) 
    println(s"Sleeping for $sleeping ms") 
    } 
} 
} 

Il est assez simple où il génère essentiellement certaines variables et l'ajouter à la ligne.

Cependant, je reçois une grosse pile d'erreur d'exception que je ne suis pas en mesure de comprendre:

"C:\Program Files\Java\jdk1.8.0_92\bin\java... 

Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1 
at java.nio.charset.CoderResult.throwException(CoderResult.java:281) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) 
at java.io.InputStreamReader.read(InputStreamReader.java:184) 
at java.io.BufferedReader.fill(BufferedReader.java:161) 
at java.io.BufferedReader.readLine(BufferedReader.java:324) 
at java.io.BufferedReader.readLine(BufferedReader.java:389) 
at scala.io.BufferedSource$BufferedLineIterator.hasNext(BufferedSource.scala:70) 
at scala.collection.Iterator.foreach(Iterator.scala:929) 
at scala.collection.Iterator.foreach$(Iterator.scala:929) 
at scala.collection.AbstractIterator.foreach(Iterator.scala:1417) 
at scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:59) 
at scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:50) 
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:104) 
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:48) 
at scala.collection.TraversableOnce.to(TraversableOnce.scala:310) 
at scala.collection.TraversableOnce.to$(TraversableOnce.scala:308) 
at scala.collection.AbstractIterator.to(Iterator.scala:1417) 
at scala.collection.TraversableOnce.toBuffer(TraversableOnce.scala:302) 
at scala.collection.TraversableOnce.toBuffer$(TraversableOnce.scala:302) 
at scala.collection.AbstractIterator.toBuffer(Iterator.scala:1417) 
at scala.collection.TraversableOnce.toArray(TraversableOnce.scala:289) 
at scala.collection.TraversableOnce.toArray$(TraversableOnce.scala:283) 
at scala.collection.AbstractIterator.toArray(Iterator.scala:1417) 
at clickstream.LogProducer$.delayedEndpoint$clickstream$LogProducer$1(logProducer.scala:16) 
at clickstream.LogProducer$delayedInit$body.apply(logProducer.scala:12) 
at scala.Function0.apply$mcV$sp(Function0.scala:34) 
at scala.Function0.apply$mcV$sp$(Function0.scala:34) 
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 
at scala.App.$anonfun$main$1$adapted(App.scala:76) 
at scala.collection.immutable.List.foreach(List.scala:389) 
at scala.App.main(App.scala:76) 
at scala.App.main$(App.scala:74) 
at clickstream.LogProducer$.main(logProducer.scala:12) 
at clickstream.LogProducer.main(logProducer.scala) 

Process finished with exit code 1 

Quelqu'un peut-il me s'il vous plaît aider à identifier ce que l'exception signifie? Merci à tous

Répondre

0

Donc, ce n'était pas difficile .. c'était ma connaissance amateur. C'était une exception d'E/S simple où Intellij n'était pas capable d'obtenir les valeurs de mon fichier csv. Quand je l'ai importé dans le répertoire racine des ressources, il m'a donné un message d'avertissement de mauvais encodage.

L'erreur est à ce moment:

val Products = scala.io.Source.fromInputStream(getClass.getResourceAsStream("/products.csv")).getLines().toArray

grâce à des efforts quoique