나는 스파크에서 룩업 테이블로 사용하고자하는 명확하게 정의 된 스키마가없는 데이터 프레임을 가지고 있습니다. 예를 들어, 아래 dataframe는 :Spark에서 찾아보기 테이블
+------------------------------------------------------------------------+
|lookupcolumn |
+------------------------------------------------------------------------+
|[val1,val2,val3,val4,val5,val6] |
+------------------------------------------------------------------------+
스키마는 다음과 같이 보일 것이다 :
는 말인지|-- lookupcolumn: struct (nullable = true)
| |-- key1: string (nullable = true)
| |-- key2: string (nullable = true)
| |-- key3: string (nullable = true)
| |-- key4: string (nullable = true)
| |-- key5: string (nullable = true)
| |-- key6: string (nullable = true)
"스키마는 명확하게 정의되지"키의 수를 알 수 있기 때문에 데이터가되는 동안 읽기 때문에 Spark에 스키마 유추를 맡깁니다. 나는 아래와 같이 열이 다른 dataframe이있는 경우
지금, :
+-----------------+
| datacolumn|
+-----------------+
| key1 |
| key3 |
| key5 |
| key2 |
| key4 |
+-----------------+
나는 결과가되고 싶어요 :
val get_val = udf((keyindex: String) => {
val res = lookupDf.select($"lookupcolumn"(keyindex).alias("result"))
res.head.toString
})
:
+-----------------+
| resultcolumn|
+-----------------+
| val1 |
| val3 |
| val5 |
| val2 |
| val4 |
+-----------------+
내가 이런
UDF
시도
그러나 Null 포인터 예외 오류가 발생합니다.
누군가가 UDF
의 문제점을 말해 줄 수 있습니까? Spark에서이 룩업을 더 잘/더 쉽게 수행 할 수있는 방법이 있습니까?
은 조회 데이터 프레임이 하나의 행 또는 다중 행입니까? –
행이 하나뿐입니다. 키와 값을 다른 열로 여러 행으로 분해하여 조인을 할 수 있다면 더 쉬울 것이라고 생각합니다. 그러나 조인을 수행하는 방법은 확실하지 않습니다. –
음, 아니. 결과 열은 값을 가지며 datacolumn에는 키가 있습니다. –