-1

Ich habe eine Spalte vom Typ Integer Arrays erzeugen:Spark-SQL-Array ein Array mit Werten in einer Spalte

case class Testing(name: String, age: Int, salary: Double, array: Array[Int]) 

    val x = sc.parallelize(Array(
    Testing(null, 21, 905.33, Array(1,2,3)), 
    Testing("Noelia", 26, 1130.60, Array(3,2,1)), 
    Testing("Pilar", 52, 1890.85, Array(3,3,3)), 
    Testing("Roberto", 31, 1450.14, Array(1,0,0)) 
    )) 

    // Convert RDD to a DataFrame 
    val df = sqlContext.createDataFrame(x) 

    // For SQL usage we need to register the table 
    df.registerTempTable("df") 

Ich möchte ein Array, dessen Elemente die Werte der Spalte „Array erstellen ". Irgendeine Idee, wie man das in Spark SQL macht?

sqlContext.sql("SELECT [array] from df").show 

[ [1,2,3], [3,2,1], [3,3,3], [1,0,0]] 
+0

Ich glaube, Sie Code fehlen. Wenn Sie wirklich von Spark SQL sprechen, benötigen Sie einen Schritt, in dem Sie einen DataFrame erstellen. –

+0

Es versteht sich, dass besser? – nest

Antwort

1

Unter der Annahme, wie Sie implizieren, dass Sie ein DataFramedf, und dass die Array() Werte in einer Spalte mit dem Namen array sollte dies tun, den Trick genannt haben.

df.select($"array").rdd.map{ 
    row => row.getList[Int](0).toArray 
}.collect() 

Von wenn Sie es durch sqlContext.sql tun wollen:

sqlContext.sql("SELECT array FROM df").rdd.map{ 
    row => row.getList[Int](0).toArray 
}.collect() 
+0

Gibt es eine Möglichkeit, dies über eine Funktion udf zu tun? – nest

+0

Wenn ja, würde genau diese selbe Logik in einem 'udf' gemacht. Auf die eine oder andere Weise müssen Sie einen 'DataFrame' in einen' Array [Array [Int]] 'konvertieren. Was bedeutet 'DataFrame' ->' RDD [Zeile] '->' RDD [Array [Int]] '->' Array [Array [Int]] ' –

+0

Sorry, aber ich bin neu und ich sehe nicht wie. Angenommen, ich möchte etwas wie: 'sqlContext.sql (" select agg (array1, array2, array3) from df ")'. Wie kann ich eine Funktion wie diese definieren? – nest

Verwandte Themen