В приведенном ниже коде 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)