4

다음과 같이 LinkeIn 계정의 데이터 스키마가 있습니다. for 배열에있는 기술을 쿼리해야합니다. 배열에는 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')" ); 

위의 쿼리는 내가 시도하는 경우 - insentive 쿼리를 사용하는 방법도 더 좋은 그중에을 제안 해주십시오 한 무엇인가?

답변

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

질문을 올리시면 최대한 멀리 도울 수 있습니다 :) –

관련 문제