0

Je travaille à la création d'un ensemble de données analytiques à l'aide de Spark et de l'API dataSet. Je suis arrivé à la partie où je calcuating certaines variables et il ressemble à quelque chose comme ceci:Méthode d'agrégation de jeu de données Spark

CntDstCdrs1.groupByKey(x => (x.bs_recordid, x.bs_utcdate)).agg(
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_1" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_1day"), 
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_3" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_3day_cust"), 
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_5" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_5day_cust"), 
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_7" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_7day_cust") 
).show() 

Ce code fonctionne très bien, mais lorsque je tente d'ajouter un nombre pour la variable « count_phone_30day » Je reçois une erreur .. "méthode surchargée ..." Cela signifie que la signature de la méthode agg sur dataSet prend maximum 4 expressions Column? De toute façon, si cette approche n'est pas la meilleure pratique pour calculer un grand nombre de variables, alors laquelle serait? J'ai compte, compte distinct, somme etc. variables.

KR, Stefan

+1

La méthode 'overloaded' erreur est probablement causée par quelque chose d'autre, comme' 'agg' sur Dataset' peut prendre beaucoup plus que 4 fonctions d'agrégation sur les conditions «quand». –

+0

@LeoC il peut, mais en relationnel 'groupBy', la Key-Value' groupByKey' a d'autres implémentations –

Répondre

1

Dataset.groupByKey retours KeyValueGroupedDataset.

Cette classe n'a pas agg avec varargs - vous pouvez fournir seulement 4 colonnes comme arguments