-1

における配列値を有する配列を作成:スパークSQLは、私は整数型配列の列を有する列

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") 

私はその要素が列「配列の値である配列を作成します"どのようにSparkのSQLでこれを行うにはどのようなアイデア?

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

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

私はあなたのコードが欠けていると思います。スパークSQLについて実際に話していると仮定すると、DataFrameを作成するステップが必要です。 –

+0

それは良いことが分かっていますか? – nest

答えて

1

あなたがdfという名前DataFrameを持っていることを意味するものとして仮定し、そしてArray()値はarrayという名前の列になっていること、これはトリックを行う必要があります。あなたはsqlContext.sqlを通してそれを実行したい場合の

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

は:

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

関数udfを使ってこれを行うにはいくつかの方法がありますか? – nest

+0

もしそうなら、それはまったく同じ論理を 'udf'で行うでしょう。あなたは 'DataFrame'を' Array [Array] 'に変換する必要があります。これは 'DataFrame' - >' RDD [Row] ' - >' RDD [Array [Int]] ' - >' Array [Array] '' –

+0

を意味します。 'sqlContext.sql(" select agg(array1、array2、array3)from df ")'のようなものが必要です。 私はこのような関数を定義できますか? – nest

関連する問題