4

我有LinkeIn帳戶的數據模式,如下所示。我需要查詢數組中的技能,其中數組可能包含JAVA或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還如何使用的情況下,insentive查詢?

回答

2
df.printschema() 

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


df.show() 

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

現在讓我們把它註冊爲一個臨時表:

>>> df.registerTempTable("t") 

現在,我們將爆炸的陣列,使用像操作者的每個元素轉換爲小寫和查詢:

>>> 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

請發佈您的問題,將盡我所能:) –