La conversion de JavaRDD à DataFrame Spark java
Je suis en train de traiter le fichier de Log. j'ai d'abord lu le fichier journal et de diviser ces fichiers en tant que par mon exigence et enregistrées à chaque colonne pour séparer les JavaRDD. Maintenant, j'ai besoin de convertir ces JavaRDD à DataFrames pour les opérations futures. C'est le code que j'ai essayé jusqu'à présent:
SparkConf conf = new SparkConf().setAppName("AuctionBid").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> diskfile = sc.textFile("/Users/karuturi/Downloads/log.txt");
JavaRDD<String> urlrdd=diskfile.flatMap(line -> Arrays.asList(line.split("\t")[0]));
System.out.println(urlrdd.take(1));
SQLContext sql = new SQLContext(sc);
et c'est de cette façon que je suis en train de convertir JavaRDD en DataFrame:
DataFrame fileDF = sqlContext.createDataFrame(urlRDD, Model.class);
Mais la ligne ci-dessus ne fonctionne pas.Je confus au sujet de Model.class.
quelqu'un peut-il me suggérer.
Grâce.
OriginalL'auteur Satish Karuturi | 2016-12-23
Vous devez vous connecter pour publier un commentaire.
Importations:
Créer une classe POJO pour les URL. Je vous recommande d'écrire pour le Journal de la ligne qui se compose d'url, la date, l'heure, la méthode, la cible, etc.. en tant que membres
Créer un EDR Url d'objets à partir d'un fichier texte
Créer DataFrame de RDD
CA à DataFrame - Spark 2.0
CA à DataFrame - Spark 1.6
Si je veux convertir un
JavaRDD
avec unSparseVector
- t-il?OriginalL'auteur mrsrinivas
Juste flatmap vos données conformément à 7 du tableau de la colonne et de l'utilisation d'un extrait de code ci-dessous
OriginalL'auteur FaigB
Vous pouvez faire quelque chose comme (je suis la conversion à la volée à partir de la scala, donc excusez les fautes de frappe):
Quelques remarques supplémentaires:
Pourquoi êtes-vous flatmaping lorsque vous prenez le premier élément? Vous pourriez avoir tout simplement fait:
JavaRDD<String> urlrdd=diskfile.flatMap(line -> line.split("\t")[0]);
Je suppose que dans la vraie vie, vous voulez supprimer le '[' partir de l'url (vous pouvez facilement le faire à la carte).
Si vous vous déplacez à spark 2.0 ou plus, alors au lieu de sqlContext vous devriez être en utilisant étincelle session (étincelle).
Vous pouvez créer un dataframe avec toutes les colonnes. Vous pouvez le faire en ajoutant tous les champs dans le schéma (c'est à dire au lieu de faire juste un seul ajouter des champs de tous les ajouter). Au lieu d'utiliser urlrdd, utilisez diskfile et de faire la distinction à l'intérieur de la "public Ligne d'appel" de la création. Ce serait quelque chose comme ceci:
JavaRDD<Row> rowRDD = diskfile.map(new Function<String, Row>() {
@override public Row call(String record) throws Exception {
String[] recs = record.split("\t")
return RowFactory.create(recs[0], recs[1], ...);
}
});
Vous pouvez le créer directement: il suffit d'utiliser
sqlContext.read.option("sep","\t").csv.load(filename,schema)
OriginalL'auteur Assaf Mendelson
Vous pouvez lire directement le fichier à l'aide de sqlContext directement
Utiliser la méthode de lecture de sqlContext
Pour plus d'info, vous pouvez suivre ce lien
https://spark.apache.org/docs/1.6.0/sql-programming-guide.html#creating-dataframes
Ou vous pouvez importer les
Ensuite utiliser
toDF()
méthode sur rdd convertir en dataframe.Ouais désolé viens de voir cela. La meilleure alternative que vous avez à utiliser sqlContext pour lire le fichier. Parce que la conversion de rdd à dataframe utilise la réflexion et donc à réduire extra calcul utiliser sqlContext pour lire le fichier.
OriginalL'auteur Akash Sethi