Ich habe die folgende Fallklasse:Explicit Besetzung mit Fallklasse Funken Lesen .csv 2.1.0
case class OrderDetails(OrderID : String, ProductID : String, UnitPrice : Double,
Qty : Int, Discount : Double)
Ich versuche, diese csv lesen: https://github.com/xsankar/fdps-v3/blob/master/data/NW-Order-Details.csv
Dies ist mein Code:
val spark = SparkSession.builder.master(sparkMaster).appName(sparkAppName).getOrCreate()
import spark.implicits._
val orderDetails = spark.read.option("header","true").csv(inputFiles + "NW-Order-Details.csv").as[OrderDetails]
Und der Fehler ist:
Exception in thread "main" org.apache.spark.sql.AnalysisException:
Cannot up cast `UnitPrice` from string to double as it may truncate
The type path of the target object is:
- field (class: "scala.Double", name: "UnitPrice")
- root class: "es.own3dh2so4.OrderDetails"
You can either add an explicit cast to the input data or choose a higher precision type of the field in the target object;
Warum kann es nicht transformiert werden, wenn alle Felder "Doppel" -Werte sind? Was versteh ich nicht?
Spark-Version 2.1.0, Scala Version 2.11.7
Danke für die Antwort, ich habe gerade die folgende Eigenschaft, die passieren können und folgert Sie alle Felder 'Option („InferSchema“," t rue ")". Über Scala convention Ich benutzte oberen camel case, weil benötigt wird, weil der csv-Header Großbuchstaben ist – own3dh2so4
Meiner Erfahrung nach funktioniert das nur manchmal für diese Situation. Wenn das alles ist, ist das cool. – Vidya
Was die Konvention betrifft, gibt es viele Möglichkeiten, zum Beispiel, indem Sie die Spalten so benennen, wie sie wollen, dass sie 'toDf' verwenden. Aber ich kann sehen, warum sich das wie unnötige Arbeit anfühlt. Ich persönlich bin gerade bei Konventionen sehr groß - vor allem bei professionellen Projekten, so dass mein Code statische Analysetests und Codeüberprüfungen besteht. – Vidya