>

다음과 같은 스칼라 데이터 프레임이 있습니다 :

+--------+--------------------+
|     uid|     recommendations|
+--------+--------------------+
|41344966|[[2174, 4.246965E...|
|41345063|[[2174, 0.0015455...|
|41346177|[[2996, 4.137125E...|
|41349171|[[2174, 0.0010590...|
df: org.apache.spark.sql.DataFrame = [uid: int, recommendations: array<struct<iid:int,rating:float>>]

추가 된 기능을 활용하기 위해 스칼라 데이터 세트로 변환하고 싶습니다. 그러나 스칼라를 처음 사용하고 열에 많은 데이터 형식이 포함되어있을 때 변환 클래스를 작성하는 방법이 확실하지 않습니다. 이것이 내가 가진 것입니다 :

val query = "SELECT * FROM myTable"
val df = spark.sql(query)
case class userRecs (uid: String, recommendations: Array[Int])
val ds = df.as[userRecs]

내 오류는 :

org.apache.spark.sql.AnalysisException: cannot resolve 'CAST(lambdavariable(MapObjects_loopValue47, MapObjects_loopIsNull47, StructField(iid,IntegerType,true), StructField(rating,FloatType,true), true) AS INT)' due to data type mismatch: cannot cast struct<iid:int,rating:float> to int;

수업을 어떻게 다시 작성해야합니까?

  • 답변 # 1

    이 솔루션은 다른 클래스가 사용할 수있는 클래스를 만드는 것이 었습니다 :

    case class productScore (iid: Int, rating: Float)
    case class userRecs (uid: Int, recommendations: Array[productScore])
    val ds = df.as[userRec]
    
    

관련 자료

  • 이전 자바 스크립트에서 이미지 크기 확인
  • 다음 tensorflow - 모델 표준 저장