2017-10-04 3 views
0

J'essaie d'obtenir des fréquences de pourcentage dans pyspark. Je l'ai fait en Pyhton comme suitComment puis-je obtenir des fréquences de pourcentage dans pyspark

Companies = df['Company'].value_counts(normalize = True) 

Obtenir les fréquences est assez simple:

# Dates in descending order of complaint frequency 
df.createOrReplaceTempView('Comp') 
CompDF = spark.sql("SELECT Company, count(*) as cnt \ 
        FROM Comp \ 
        GROUP BY Company \ 
        ORDER BY cnt DESC") 
CompDF.show() 
+--------------------+----+ 
|    Company| cnt| 
+--------------------+----+ 
|BANK OF AMERICA, ...|1387| 
|  EQUIFAX, INC.|1285| 
|WELLS FARGO & COM...|1119| 
|Experian Informat...|1115| 
|TRANSUNION INTERM...|1001| 
|JPMORGAN CHASE & CO.| 905| 
|  CITIBANK, N.A.| 772| 
|OCWEN LOAN SERVIC...| 481| 

Comment puis-je obtenir pour cent fréquences d'ici? J'ai essayé un tas de choses avec pas beaucoup de chance. Toute aide serait appréciée.

+0

Comment l'utilisation totale compte pour calculer le pourcentage.? – Suresh

+0

Si vous avez trouvé la réponse utile, veuillez l'accepter - merci – desertnaut

Répondre

0

Comme Suresh implique dans les commentaires, en supposant que total_count est le nombre de lignes dans dataframe Companies, vous pouvez utiliser withColumn pour ajouter une nouvelle colonne nommée percentages dans CompDF:

total_count = Companies.count() 

df = CompDF.withColumn('percentage', CompDF.cnt/float(total_counts)) 
+0

Cela semble très propre et simple. Merci! – Murat

+0

@Murat vous êtes les bienvenus à * accepter * la réponse – desertnaut

0

Peut être modifier la requête SQL vous obtiendrez le résultat que vous voulez.

"SELECT Company,cnt/(SELECT SUM(cnt) from (SELECT Company, count(*) as cnt 
    FROM Comp GROUP BY Company ORDER BY cnt DESC) temp_tab) sum_freq from 
    (SELECT Company, count(*) as cnt FROM Comp GROUP BY Company ORDER BY cnt 
    DESC)" 
+0

Merci pour votre réponse! J'ai reçu une erreur: IllegalArgumentException: la requête a échoué: La sous-requête 1601 n'a pas terminé ' J'ai dû la modifier légèrement pour obtenir une base de données comme suit: 'CompDF = spark.sql (" SELECT Company, cnt/(SELECT SUM (cnt) de (SELECT Company, count() comme cnt \ FROM Comp GROUP BY Société ORDER BY cnt DESC) temp_tab) sum_freq depuis \ (SELECT Company, count() comme cnt FROM Comp GROUP BY Company ORDER BY cnt DESC) ") .collect() C = spark.createDataFrame (CDF) C.show() 'Merci encore! – Murat