j'ai une obligation de valider une opération d'acquisition, Bassically, j'ai deux grands fichiers dans HDFS, on est Avro formaté (fichiers ingérés), un autre est en parquet formaté (fichier consolidé).La meilleure façon de gagner en performance lorsque vous faites une jointure comptage en utilisant étincelle et scala
fichier Avro a ce schéma:
nom de fichier, date, compter, afield1, afield2, afield3, afield4, afield5, afield6, ... afieldN
fichier Parquet a ce schéma:
fileName, anotherField1, anotherField1, anotherField2, anotherFiel3, anotherField14, ..., anotherFieldN
Si j'essaie de charger les deux fichiers dans un DataFrame, puis d'utiliser une jointure naïve, le travail sur ma machine locale prend plus de temps. que 24 heures!, ce qui est unacept capable.
ingestedDF.join(consolidatedDF).where($"filename" === $"fileName").count()
Quelle est la meilleure façon d'y parvenir? ¿Déposer des colonnes depuis le DataFrame avant de faire le join-where-count? ¿Calculer les comptes par dataframe puis rejoindre et additionner?
PD
Je lisais sur la technique joint-carte côté, mais il semble que cette technique fonctionnerait pour moi s'il y avait un petit fichier capable de tenir en mémoire vive, mais je ne peux pas assurer que, donc, je aimerait savoir quel est le moyen préféré de la communauté pour y parvenir.
http://dmtolpeko.com/2015/02/20/map-side-join-in-spark/
est-ce que vous ne pouvez pas calculer les comptes par trame de données, puis vous joindre et faire une somme? – mtoto
Je suppose que je peux, @mtoto, mais, d'abord, je voudrais savoir quelle est la meilleure façon d'y parvenir. En fait, j'ai l'exécution de cette phrase ingestedDF.join (consolidatedDF) .où ($ "filename" === $ "fileName"). Count() afin de connaître le nombre. Lorsque le travail est terminé, je vais essayer votre suggestion. Comment écrire ce code? – aironman
Vous ne savez pas quelle est la question: Voulez-vous seulement connaître le nombre de noms de fichiers communs dans les deux ensembles de données? ou la différence? – maasg