Sto usando Spark 1.3.1 con Hive e ho un oggetto row che è una lunga serie di double da passare a un costruttore Vecors.dense, comunque quando converto una Row in una array viaConverti Spark Row in Array of Doubles dattilografato
SparkDataFrame.map{r => r.toSeq.toArray}
Tutte le informazioni sul tipo vengono perse e viene restituito un array di tipo [Qualsiasi]. Non sono in grado di lanciare questo oggetto per raddoppiare usando
SparkDataFrame.map{r =>
val array = r.toSeq.toArray
array.map(_.toDouble)
} // Fails with value toDouble is not a member of any
come fa
SparkDataFrame.map{r =>
val array = r.toSeq.toArray
array.map(_.asInstanceOf[Double])
} // Fails with java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double
vedo che l'oggetto Row ha un'API che supporta ottenere elementi specifici come un tipo, tramite:
SparkDataFrame.map{r =>
r.getDouble(5)}
Tuttavia, questo evento non riesce con java.lang.Integer non può essere lanciato su java.lang.Double
Il Lavoro solo intorno ho trovato è il seguente:
SparkDataFrame.map{r =>
doubleArray = Array(r.getInt(5).toDouble, r.getInt(6).toDouble)
Vectors.dense(doubleArray) }
Tuttavia questo è eccessivamente noioso quando l'indice 5 a 1000 bisogno di essere convertito in una serie di doppie.
Un modo per indicizzare esplicitamente l'oggetto riga? sguardo
Ciò non riesce ancora con gli stessi errori. Correzione del codice per non rispecchiare questo problema – user2726995
@ user2726995 dare a qualcuno un -1 che sta cercando di rispondere alla tua domanda non è un buon modo per ottenere aiuto – bwawok
Apprezzo qualsiasi tipo di assistenza, un downvote non è personale, solo che il soluzione non risponde alla domanda diretta a portata di mano – user2726995