scala java .lang.ClassCastException при randomSplit - PullRequest
0 голосов
/ 01 апреля 2020

В приведенном ниже коде cohort_counts_4 - это фрейм данных с 3 столбцами g, samplingRate и samplingRate1. В переменной rowDF я собираю столбцы samplingRate и samplingRate1 (которые являются процентами). И в переменной процентах я преобразовываю ее в Array[Double].

Когда я пытаюсь запустить это, я получаю ошибку ниже во время выполнения в процентах. Мне нужно, чтобы он был Array[Double], как я должен сделать randomSplit на следующем шаге.

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.Double. 

Пожалуйста, дайте мне знать ваши мысли.

образец данных процентов -

percentages: Array[Seq[Double]] =
 Array(WrappedArray(0.06449504858964898, 0.9355049514103511)
     , WrappedArray(0.015861918725594032, 0.9841380812744059)
     , WrappedArray(0.22082241578907924, 0.7791775842109208)
     , WrappedArray(0.14416119376185044, 0.8558388062381496)
     , WrappedArray(0.10958692395592619, 0.8904130760440738)
     , WrappedArray(1.0, 0.0)
     , WrappedArray(0.6531128743810083, 0.3468871256189917)
     , WrappedArray(0.04880653326943304, 0.9511934667305669))
val cohortList = cohort_counts_4.select("g").collect().map(_(0)).toList
var cohort_list = new ListBuffer[org.apache.spark.sql.DataFrame]()
var total_rows: Int = 0
for (igroupid<-cohortList){
    val sample_rate = cohort_counts_4.filter(col("g")===igroupid).select("samplingRate","samplingRate1") 
   cohort_list += sample_rate
  val curr_rows = sample_rate.count().toInt
  total_rows += curr_rows
}
val customers_new = cohort_list.reduce(_ union _)
val rowDF = customers_new.select(array(customers_new.columns.map(col):_*) as "row")
var percentages =Array(rowDF.collect.map(_(0)).asInstanceOf[Double])
// var percentages = rowDF.collect.map(_.getSeq[Double](0))
val uni = customers_2.select("x","g").distinct
      .randomSplit(percentages)

1 Ответ

1 голос
/ 01 апреля 2020

Я изменил код с

var percentages =Array(rowDF.collect.map(_(0)).asInstanceOf[Double])

на ниже

var percentages =rowDF.collect.map(_(0).asInstanceOf[Seq[Double]]).flatten 

и все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...