4

私はLinkeInアカウントのデータスキーマを以下に示すように持っています。配列のforにあるスキルを照会する必要があります。ここで、arrayにはJAVA OR java OR JavaまたはJAVA開発者OR 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')" ); 

上記のクエリは、私がしようとした場合、insentiveクエリを使用する方法も任意のより良い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

あなたの質問を投稿してください、できる限り私は助けます:) –

関連する問題