-2
votes

Comment faire correspondre le schéma de deux cadres de données

J'ai des noms de colonne par défaut enregistrés dans une table et je souhaite correspondre au nom de la colonne enregistré dans une table avec les noms de colonne que je recevrai dans le fichier CSV.

résultat du code ci-dessous est: p>

Si le fichier a les mêmes noms de colonne que ceux-ci stockés dans la table pour correspondre, effectuez quelques-uns de la sortie et lancez un courrier électronique de schéma de désactivation. P>

Voici mon code: P>

val expectedschemadf = spark.sql(s"""SELECT columnname FROM  table""").columns
val receivedschemadf = spark.table(vendorfile.toString).columns

if(expectedschemadf.size == receivedschemadf.size)
{
  breakable {for(i<-0 to expectedschemadf.size-1 by 1)
  {
    if (!(receivedschemadf contains expectedschemadf(i)))
    {
      print("fail")
      break
    }

  }
  }
}
else(print("fail"))


0 commentaires

3 Réponses :


0
votes

ci-dessous est le code d'échantillon pour vérifier les deux schema de trame de données xxx


3 commentaires

RJSHKRMARA: Merci d'avoir partagé votre aide. Fondamentalement, j'ai fait la partie de chèque de schéma comme vous l'avez mentionnée, mais je souhaite maintenant comparer les noms de colonne et non les types de données.


Comme: J'ai stocké les noms de colonne dans une table en ruche, puis devez comparer ces noms avec l'en-tête de fichier. Si l'en-tête du fichier contient le même nom de colonne que stocké dans le tableau puis continue, sinon casser le travail.


Obtenez simplement les DTYPES de votre fichier d'entrée une fois qu'il est dans DF. Si vous prenez la première variante de la tupple, il devrait vous donner une liste de vos noms de colonne et de seconde devrait avoir le type. vous pouvez faire venir votre table dans un autre SEQ et correspondre aux séquences



0
votes

Je n'ai pas exécuté ce code dans un environnement, mais il s'agit généralement de la manière dont on peut obtenir le nom des colonnes dans SEQ et SEQ.Equals devraient renvoyer true, si la commande et les membres des séquences sont identiques et false s'il y en a Différences.

val tableSeq = Seq("name","address","zip") // simulating a seq that you can retrive from your table 
val inputdf = spark.read.json("path") // reading some external data into dataframe
val columnListUnzipped = inputdf.dtypes.unzip // unzip will give tupple of column name and type
val columnList= columnListUnzipped._1 // get all column names as a seq
val isEqual= tableSeq.euqals(columnList) // compare 2 sequences with using equal as provided by Scala


2 commentaires

Merci Aaron: J'ai mis à jour ma question et je veux automatiser mon code


Je ne sais pas quoi d'autre que vous avez besoin .. Le code ci-dessus devrait faire ce que vous voulez accomplir



0
votes

Voici comment j'ai fait ma tâche. xxx


0 commentaires