4

J'ai le schéma de données du compte LinkeIn comme indiqué ci-dessous. J'ai besoin d'interroger les compétences qui sont dans le tableau de, où tableau peut contenir soit JAVA OU java OU Java ou JAVA développeur OU Java développeur.Spark Sql, impossible d'interroger plusieurs valeurs possibles dans un tableau

Linkedin dataschema

Dataset<Row> sqlDF = spark.sql("SELECT * FROM people" 
      + " WHERE ARRAY_CONTAINS(skills,'Java') " 
      + " OR ARRAY_CONTAINS(skills,'JAVA')" 
      + " OR ARRAY_CONTAINS(skills,'Java developer') " 
      + "AND ARRAY_CONTAINS(experience['description'],'Java developer')" ); 

La requête ci-dessus est ce que j'ai essayé et s'il vous plaît suggérer une meilleure way.and également comment utiliser la requête de cas insentive?

Répondre

2
df.printschema() 

root 
|-- skills: array (nullable = true) 
| |-- element: string (containsNull = true) 


df.show() 

+--------------------+ 
|    skills| 
+--------------------+ 
|  [Java, java]| 
|[Java Developer, ...| 
|    [dev]| 
+--------------------+ 

permet maintenant l'enregistrer comme une table temporaire:

>>> df.registerTempTable("t") 

Maintenant, nous allons exploser le tableau, convertir chaque élément en minuscules et requête en utilisant l'opérateur LIKE:

>>> res = sqlContext.sql("select skills, lower(skill) as skill from (select skills, explode(skills) skill from t) a where lower(skill) like '%java%'") 
>>> res.show() 
+--------------------+--------------+ 
|    skills|   skill| 
+--------------------+--------------+ 
|  [Java, java]|   java| 
|  [Java, java]|   java| 
|[Java Developer, ...|java developer| 
|[Java Developer, ...|  java dev| 
+--------------------+--------------+ 

Maintenant, vous pouvez faire un domaine distinct sur les compétences.

+0

Merci l'homme, vous avez sauvé ma journée :). – AshisParajuli

+0

pouvez-vous m'aider plus? – AshisParajuli

+0

s'il vous plaît postez votre question, aidera autant que je peux :) –