我有一列整数数组类型:
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]]
假设您有一个名为 df
的DataFrame
,并且Array()
值位于名为array
的列中,这应该可以解决问题。
df.select($"array").rdd.map{
row => row.getList[Int](0).toArray
}.collect()
如果你想通过sqlContext.sql
来做到这一点:
sqlContext.sql("SELECT array FROM df").rdd.map{
row => row.getList[Int](0).toArray
}.collect()