Sto provando a creare una riga (org.apache.spark.sql.catalyst.expressions.Row
) in base all'input dell'utente. Non sono in grado di creare una riga casualmente.Come creare una riga da un elenco o matrice in Spark utilizzando Scala
C'è qualche funzionalità per creare una Linea List
o Array
.
Per per esempio., Se ho un file .csv
con il seguente formato,
"91xxxxxxxxxx,21.31,15,0,0"
Se l'input dell'utente [1, 2]
poi ho bisogno di prendere solo 2 ° colonna e 3 ° colonna insieme al customer_id
che è la prima colonna
cerco di analizzarlo con il codice:
val l3 = sc.textFile("/SparkTest/abc.csv").map(_.split(" ")).map(r => (foo(input,r(0)))) `
dove foo è defi ned come
def f(n: List[Int], s: String) : Row = {
val n = input.length
var out = new Array[Any](n+1)
var r = s.split(",")
out(0) = r(0)
for (i <- 1 to n)
out(i) = r(input(i-1)).toDouble
Row(out)
}
e l'ingresso è un elenco dire
val input = List(1,2)
L'esecuzione di questo codice ottengo l3 come:
Array[org.apache.spark.sql.Row] = Array([[Ljava.lang.Object;@234d2916])
Ma quello che voglio è:
Array[org.apache.spark.sql.catalyst.expressions.Row] = Array([9xxxxxxxxxx,21.31,15])`
Questo deve essere passato per creare creare uno schema in Spark SQL
Questo funziona correttamente, se voglio analizzarlo come una singola riga di 3 valori di stringa. Ma come usarlo, se il primo valore è una stringa, il 2 ° e il 3 ° valore sono di tipo Double? È possibile? – Anju