Analyser CSV comme DataFrame/DataSet avec Apache Spark et Java
Je suis nouveau à l'étincelle, et je veux utiliser du groupe-par & réduire de trouver la suite à partir d'un fichier CSV (une ligne par employé):
Department, Designation, costToCompany, State
Sales, Trainee, 12000, UP
Sales, Lead, 32000, AP
Sales, Lead, 32000, LA
Sales, Lead, 32000, TN
Sales, Lead, 32000, AP
Sales, Lead, 32000, TN
Sales, Lead, 32000, LA
Sales, Lead, 32000, LA
Marketing, Associate, 18000, TN
Marketing, Associate, 18000, TN
HR, Manager, 58000, TN
Je voudrais simplifier le propos de CSV avec le groupe par Département, de la Désignation, de l'État avec des colonnes supplémentaires avec somme(costToCompany) et TotalEmployeeCount
Devriez obtenir un résultat comme:
Dept, Desg, state, empCount, totalCost
Sales,Lead,AP,2,64000
Sales,Lead,LA,3,96000
Sales,Lead,TN,2,64000
Est-il possible de réaliser cela en utilisant des transformations et des actions. Ou doit-on aller pour CA?
pourriez-vous s'il vous plaît organiser le CSV blocs (d'entrée et de résultats) afin de distinguer clairement entre les en-têtes et chaque ligne unique? Il n'est pas clair pour l'instant, avec une ligne commence ou se termine.
Cochez cette façon de le faire avec Spark 2.x +
Cochez cette façon de le faire avec Spark 2.x +
OriginalL'auteur mithra | 2014-08-18
Vous devez vous connecter pour publier un commentaire.
Procédure
Créer une Classe (Schéma) pour encapsuler votre structure (il n'est pas nécessaire pour l'approche B, mais ce serait rendre votre code plus facile à lire si vous utilisez Java)
Chargement CVS (JSON) fichier
À ce stade, vous avez 2 méthodes:
A. SparkSQL
Enregistrer un tableau (à l'aide de votre Schéma défini Classe)
Requête de la table avec votre Requête souhaitée-groupe-par
Ici vous serait également en mesure de faire toute autre demande que vous désirez, à l'aide d'un SQL approche
B. Étincelle
De cartographie à l'aide d'une clé composée:
Department
,Designation
,State
});
reduceByKey à l'aide de la clé composite, résumant
costToCompany
colonne, et l'accumulation du nombre d'enregistrements par cléJe ne peux pas croire la façon dont détaillé de l'API Java est - il presque hystérique 😀
Le
Record
classe est dans le post.J'ai essayé sparkSQL il a réussi, alors j'ai essayé les autres B methord j'obtiens une erreur au final_rdd_records (ligne 149) org.apache.maven.cycle de vie.LifecycleExecutionException: Échec de l'exécution de l'objectif org.apache.maven.plugins:maven-compiler-plugin:2.5.1:la compilation (par défaut-compiler) sur le projet simple-projet: Compilation de l'échec /Volumes/Official/spark-1.0.2-bin-hadoop2/try/simple-project/src/main/java/SimpleApp.java:[149,96] erreur: impossible de trouver le symbole
Aussi de format de Date n'est pas de travailler avec spark
OriginalL'auteur emecas
Utilisant Spark 2.x(et ci-dessus) avec Java
Créer SparkSession objet aka
spark
Créer Schéma de Ligne, avec
StructType
Créer dataframe de fichier CSV et de les appliquer schéma
option de plus sur la lecture de données à partir de fichier CSV
Maintenant, nous pouvons agrégation de données dans les 2 sens
dépendant des bibliothèques
OriginalL'auteur mrsrinivas
Suivantes pourraient ne pas être tout à fait correcte, mais elle devrait vous donner une idée de comment jongler avec les données. C'est pas joli, doit être remplacé par cas, classes, etc, mais comme un rapide exemple d'utilisation de l'étincelle de l'api, j'espère que c'est suffisant 🙂
Ou vous pouvez utiliser SparkSQL:
Ensuite, il suffit de sauter l'étape de filtre. J'ai mis à jour le code en conséquence. L'objectif est de convertir les lignes en clé-valeur, où la clé contient l'identifiant que vous souhaitez regrouper, et la valeur contient les valeurs que vous voulez réduire. Dans ce cas, nous avons un groupe de choses par le ministère,de la désignation et de l'état, et nous voulons résumer le nombre d'employés, ainsi que le coût, ce sont les valeurs.
Merci, Merci beaucoup, je vais essayer. Vous avez sauvé ma journée!
OriginalL'auteur jkgeyti
De JSON, si votre fichier texte contient un objet JSON par ligne, vous pouvez utiliser
sqlContext.jsonFile(path)
laisser Spark SQL charger unSchemaRDD
(le schéma sera automatiquement déduite). Ensuite, vous pouvez l'enregistrer comme une table et des requêtes SQL. Vous pouvez également charger manuellement le fichier texte comme unRDD[String]
contenant un objet JSON par enregistrement et l'utilisationsqlContext.jsonRDD(rdd)
à son tour comme unSchemaRDD
.jsonRDD
est utile lorsque vous avez besoin de pré-traitement de vos données.OriginalL'auteur yhuai