4

У меня есть схема данных учетной записи LinkeIn, как показано ниже. Мне нужно запросить навыки, которые находятся в for для массива, где массив может содержать JAVA OR java или Java или JAVA-разработчик или Java-разработчик.Spark Sql, не удалось запросить несколько возможных значений в массиве

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')" ); 

Этот запрос является то, что я пытался и, пожалуйста, предложить какой-либо лучше way.and также как использовать случай-Инсентив запрос?

ответ

2
df.printschema() 

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


df.show() 

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

Теперь позволяет зарегистрировать ее как временную таблицу:

>>> df.registerTempTable("t") 

Теперь мы взорвется массив, преобразовать каждый элемент в нижнем регистре и запрос с использованием 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| 
+--------------------+--------------+ 

Теперь вы можете сделать отдельную область навыков.

+0

Спасибо, человек, ты спас мой день :). – AshisParajuli

+0

Вы можете помочь мне больше? – AshisParajuli

+0

, пожалуйста, напишите свой вопрос, помогите, насколько я могу :) –

Смежные вопросы