2016-12-08 4 views
-1

Je tente le Kaggle Titanic Example en utilisant SparkML et Scala. Je tente de charger le premier fichier de formation, mais je suis en cours d'exécution dans une étrange erreur:Chargement CSV en étincelle

java.io.IOException: Could not read footer: java.lang.RuntimeException: file:/Users/jake/Development/titanicExample/src/main/resources/data/titanic/train.csv is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [44, 81, 13, 10] 

Le fichier est un .csv donc je ne sais pas pourquoi son attendant un fichier parquet.

Voici mon code:

object App { 

    val spark = SparkSession 
    .builder() 
    .master("local[*]") 
    .appName("liveOrDie") 
    .getOrCreate() 

    def main(args: Array[String]) { 

    val rawTrainingData = spark.read 
     .option("header", "true") 
     .option("delimiter", ",") 
     .option("inferSchema", "true") 
     .load("src/main/resources/data/titanic/train.csv") 

// rawTrainingData.show() 
    } 
} 

Répondre

0

Je semble avoir eu un conflit avec les versions Scala dans mon pom.xml PAS mon code d'origine. Mon pom.xml avait plusieurs versions de Scala qui causaient apparemment des problèmes. J'ai mis à jour toutes les dépendances qui ont utilisé Scala à la même version en utilisant une propriété dynamique <scala.dep.version>2.11</scala.dep.version> et qui a résolu le problème.

+0

Ce n'était pas ma suggestion, le code que vous avez écrit n'a aucun sens puisque 'load' ne renvoie pas un' DataFrameReader' –

+0

De toute façon, je supprimer le commentaire dirigé vers moi et ensuite accepter cela comme la réponse si d'autres utilisateurs SO peuvent apprendre de votre expérience. –

+0

La résolution de votre problème de dépendance a également permis au code que vous avez écrit dans votre question initiale de fonctionner ou était-ce l'une des autres solutions? Veuillez décrire a) ce qui doit être corrigé et b) quel code vous utilisez pour charger les csv maintenant. –

0

Vous êtes absent format d'entrée. Soit:

val rawTrainingData = spark.read 
    .option("header", "true") 
    .option("delimiter", ",") 
    .option("inferSchema", "true") 
    .csv("src/main/resources/data/titanic/train.csv") 

ou

val rawTrainingData = spark.read 
    .option("header", "true") 
    .option("delimiter", ",") 
    .option("inferSchema", "true") 
    .format("csv") 
    .load("src/main/resources/data/titanic/train.csv") 
+0

Ouais je remarque que juste après je suis entré dans la question. J'ai ajouté la ligne '.format (" com.databricks.spark.csv ")' mais cela n'a pas fait l'affaire. J'ai également essayé vos deux solutions, mais cela n'a pas marché non plus. –

0

Il attend un fichier parquet parce que c'est ce que le default file type. Si vous utilisez Spark < 2.0, vous devez utiliser Spark-CSV. Sinon, si vous utilisez Spark 2.0+, vous pourrez utiliser le DataFrameReader en utilisant .csv(..fname..) au lieu de .load(..fname..).

0

Vous devez ajouter un jar dépendance à partir de databricks dans votre pom. L'étincelle de version inférieure ne fournit pas d'API pour lire csv. Une fois que vous téléchargez, vous pouvez écrire quelque chose comme ci-dessous ..

val df = sqlContext.read 
.format("com.databricks.spark.csv") 
.option("header", "true") 
// Use first line of all files as header 
.option("inferSchema", "true") 
// Automatically infer data types 
.load("cars.csv") 

Ref url: https://github.com/databricks/spark-csv/blob/master/README.md

+0

Je l'avais là-dedans. En fait, maintenant que je l'ai fonctionné, je peux commenter la dépendance de Databricks et le programme fonctionnera toujours. Je devrais noter que j'utilise Spark 2.0. –

+0

c'est génial et merci de m'avoir informé sur le support de l'étincelle 2.0. –