2017-07-29 3 views
0

J'ai un fichier avec une colonne contenant des ID. Habituellement, un identifiant n'apparaît qu'une seule fois, mais occasionnellement, ils sont associés à plusieurs enregistrements. Je veux compter combien de fois un ID donné est apparu, puis divisé en deux dfs séparés afin que je puisse exécuter des opérations différentes sur les deux. Un df devrait être là où les identifiants n'apparaissent qu'une seule fois, et où les identifiants devraient apparaître plusieurs fois.Filtrage du nombre de fois qu'une valeur apparaît dans PySpark

j'ai pu compter avec succès le nombre de cas, un ID est apparu en regroupant sur ID et joindre les comptes en arrière sur la df originale, comme ceci:

newdf = df.join(df.groupBy('ID').count(),on='ID') 

Cela fonctionne bien, comme je reçois une sortie comme ceci:

ID  Thing count 
287099 Foo  3 
287099 Bar  3 
287099 Foobar 3 
321244 Barbar 1 
333032 Barfoo 2 
333032 Foofoo 2 

Mais, maintenant, je veux diviser la df pour que j'ai un df où count = 1, et compte> 1. ci-dessous et leurs variations ne fonctionnent pas, cependant:

singular = df2.filter(df2.count == 1) 

Je reçois une erreur 'TypeError: condition devrait être chaîne ou colonne' à la place. Lorsque j'ai essayé d'afficher le type de la colonne, cela indique que la colonne count est une instance. Comment puis-je obtenir PySpark pour traiter la colonne de compte comme j'en ai besoin?

Répondre

2

comptage est une méthode de trame de données,

>>> df2.count 
<bound method DataFrame.count of DataFrame[id: bigint, count: bigint]> 

Lorsque, filtre a besoin d'une colonne d'opérer sur, le changer comme ci-dessous,

singular = df2.filter(df2['count'] == 1)