본문 바로가기
BigData/Spark

[개발] Spark SQL DataFrame Vector to Array

by 제2의지니 2021. 10. 21.

LogisticRegression으로 모델 학습한 결과 테이블 중에서 rawprediction, probability 값이 vector 형태로 나오는데  spark sql에서 인덱스 1 값을 가지고 오고 싶어서 방법 찾던 중 해결한 방법. 추후에 spark를 더 공부한 후 다른 방법을 찾으면 글 업데이트할 예정.

 

현재 사용하고 있는 Spark 버전은 Spark 2.3.1 

spark 3.0.0 버전 부터는 vector_to_array 함수 제공

 

 

Spark DataFrame 스키마에 column dataType이 vector인 경우가 있을 때 Spark Sql에서 데이터를 꺼내오기 위해 아래와 같이 처리함.

  •  vector 가 포함되어 있는 데이터 프레임 스키마

vector in dataframe 

  •  withColumn :  데이터 프레임에 새로운 컬럼 추가하는 transformation function을 사용하여 vector 컬럼을 array 형태로 컬럼 추가 후 데이터 select 
import org.apache.spark.ml.linalg.DenseVector
val toArr: Any => Array[Double] = _.asInstanceOf[DenseVector].toArray
val toArrUdf = udf(toArr)

val resultDf = vPredictsDf.withColumn("rawPrediction_arr",toArrUdf($"rawPrediction")).withColumn("probability_arr",toArrUdf($"probability"))

resultDf.printSchema

spark.sql(s""" SELECT rawPrediction_arr[1] FROM resultTb """).show(5)
  • resultDf.printSchema 결과

  • Spark.sql 결과


  • to_array  사용했을 경우 에러

Undefined function: 'to_array'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.;

df.select(ith("features", lit(1))).show()

to_array(features)[1]

 

  • vector_to_array 사용했을 경우 에러

Undefined function: 'vector_to_array'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.;

 

  • 스키마 조회
데이타프레임.printSchema

 

- 참고 

 https://stackoverflow.com/questions/60513924/how-to-convert-a-column-of-type-vector-to-array-string-type-in-pyspark

 

How to convert a column of type Vector to array/string type in PySpark?

Consider following dataframe in pyspark: +-----------+ | Col A| +-----------+ | [0.5, 0.6]| | [0.7, 0.8]| | [1.1, 1.5]| +...

stackoverflow.com

 

'BigData > Spark' 카테고리의 다른 글

[Spark] RDD(Resilient Distributed Dataset) 개념과 연산 예제  (0) 2021.11.06
[Spark] 스파크 개념  (0) 2021.10.20

댓글