nous avons les données suivantes hébergées dans le répertoire de travail:
category SumDD MeanCC CountDistinctFF e 78.2 2 1 EE 33.2 44. 1 WW 14.55 4 1 S 15 24 2 Q 20.4 5.6 1
Nous utilisons les commandes Spark pour lire le fichier à partir du répertoire de travail
>sc <- spark_connect(master = "local", spark_home = "/home/tomas/spark-2.1.0-bin-hadoop2.7/", version = "2.1.0") >df <- spark_read_csv(sc, name = "data", path = "D.csv", header = TRUE, delimiter = ",")
Je veux obtenir une matrice comme celle-ci, dans laquelle est regroupée par "catégorie", somme DD, calculez la moyenne de "CC", comptez différemment en "FF"
Ça resterait comme ça :
>library(sparklyr) >library(dplyr) >f<-data.frame(category=c("e","EE","W","S","Q","e","Q","S"), DD=c(33.2,33.2,14.55,12,13.4,45,7,3), CC=c(2,44,4,44,9,2,2.2,4), >FF=c("A","A","A","A","A","A","B","A") ) >write.csv(f,"D.csv")##Write in working directory
3 Réponses :
Je ne sais pas si vous recherchez une solution à partir d'un package spécifique, cela peut être réalisé en utilisant le package Voici l'exemple de code correspondant. Code: dplyr
où nous utilisons group_by
en utilisant category code> et
résument
le résultat en fonction de nos besoins. category sumDD MeanCC CountDistinctFF
<fct> <dbl> <dbl> <int>
1 e 78.2 2 1
2 EE 33.2 44 1
3 Q 20.4 5.6 2
4 S 15 24 1
5 W 14.6 4 1
f %>% group_by(category) %>%
summarise(sumDD = sum(DD), MeanCC = mean(CC), CountDistinctFF = length(unique(FF)))
Bonjour, la sortie me montre une erreur: Erreur: org.apache.spark.sql.AnalysisException: Fonction non définie: 'UNIQUE'. Cette fonction n'est ni une fonction temporaire enregistrée ni une fonction permanente enregistrée dans la base de données «par défaut». ligne 1 pos 71
Pour manipuler spark DF, vous devez utiliser les fonctions de dplyr. Dans l'environnement Spark, la réponse de Naveen fera l'affaire sauf pour la dernière variable. Au lieu de unique
, vous pouvez essayer n_distinct
de dplyr
> df0%>%collect # A tibble: 5 x 4 category sumDD MeanCC CountDistinctFF <chr> <dbl> <dbl> <dbl> 1 e 78.2 2 1 2 EE 33.2 44 1 3 S 15 24 1 4 Q 20.4 5.6 2 5 W 14.6 4 1
Pour vérifier vos résultats en tant que Spark DF, vous pouvez utiliser:
> glimpse(df0) Observations: ?? Variables: 4 $ category <chr> "e", "EE", "S", "Q", "W" $ sumDD <dbl> 78.20, 33.20, 15.00, 20.40, 14.55 $ MeanCC <dbl> 2.0, 44.0, 24.0, 5.6, 4.0 $ CountDistinctFF <dbl> 1, 1, 1, 2, 1
ou vous pouvez collecter de nouveau sur votre système local et manipuler comme n'importe quel bloc de données R
df0=df%>%group_by(category)%>% summarize(sumDD=sum(DD,na.rm=T),MeanCC=mean(CC,na.rm=T),CountDistinctFF=n_distinct(FF))
Très bien, ça marche! Il a cette sortie. Mais cela n'a aucune influence sur la sortie: Messages d'avertissement: 1: Les valeurs manquantes sont toujours supprimées dans SQL. Utilisez SUM (x, na.rm = TRUE)
pour faire taire cet avertissement 2: les valeurs manquantes sont toujours supprimées dans SQL. Utilisez AVG (x, na.rm = TRUE)
pour faire taire cet avertissement. Est-ce dû à quelque chose?
J'ai mis à jour la réponse maintenant, vous ne devriez pas recevoir les avertissements
De manière complémentaire à la réponse d'Antonis, une erreur est apparue plus tard. En enquêtant, j'ai trouvé qu'il y avait un conflit entre les packages, en particulier: dplyr et SparkR.
Ce problème est résolu en installant le package tidyverse et en appelant les commandes comme suit:
>library(tidyverse) >df0=df%>%dplyr::group_by(category)%>%dplyr::summarize(sumDD=sum(DD,na.rm=T),MeanCC=mean(CC,na.rm=T),CountDistinctFF=n_distinct(FF)) >glimpse(df0) Observations: ?? Variables: 4 $ category <chr> "e", "EE", "S", "Q", "W" $ sumDD <dbl> 78.20, 33.20, 15.00, 20.40, 14.55 $ MeanCC <dbl> 2.0, 44.0, 24.0, 5.6, 4.0 $ CountDistinctFF <dbl> 1, 1, 1, 2, 1
p >