小编nes*_*est的帖子

SparkSQL 函数需要类型为 Decimal

我设计了以下函数来处理任何数字类型的数组:

def array_sum[T](item:Traversable[T])(implicit n:Numeric[T]) = item.sum
// Registers a function as a UDF so it can be used in SQL statements.
sqlContext.udf.register("array_sumD", array_sum(_:Seq[Float]))
Run Code Online (Sandbox Code Playgroud)

但是想要传递一个 float 类型的数组会出现以下错误:

// Now we can use our function directly in SparkSQL.
sqlContext.sql("SELECT array_sumD(array(5.0,1.0,2.0)) as array_sum").show
Run Code Online (Sandbox Code Playgroud)

错误:

 cannot resolve 'UDF(array(5.0,1.0,2.0))' due to data type mismatch: argument 1 requires array<double> type, however, 'array(5.0,1.0,2.0)' is of array<decimal(2,1)> type;
Run Code Online (Sandbox Code Playgroud)

types scala apache-spark apache-spark-sql

3
推荐指数
1
解决办法
1万
查看次数

Spark SQL - 从sql函数生成数组数组

我想创建一个数组数组.这是我的数据表:

// A case class for our sample table
case class Testing(name: String, age: Int, salary: Int)

// Create an RDD with some data
val x = sc.parallelize(Array(
    Testing(null, 21, 905),
    Testing("Noelia", 26, 1130),
    Testing("Pilar", 52,  1890),
    Testing("Roberto", 31, 1450)
 ))

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

// For SQL usage we need to register the table
df.registerTempTable("df")
Run Code Online (Sandbox Code Playgroud)

我想创建一个整数列"age"的数组.为此,我使用"collect_list":

sqlContext.sql("SELECT collect_list(age) as age from df").show
Run Code Online (Sandbox Code Playgroud)

但现在我想生成一个包含多个数组的数组,如上所示:

 sqlContext.sql("SELECT collect_list(collect_list(age), collect_list(salary)) as arrayInt from df").show
Run Code Online (Sandbox Code Playgroud)

但这不起作用,或使用函数org.apache.spark.sql.functions.array.有任何想法吗?

scala apache-spark apache-spark-sql

3
推荐指数
1
解决办法
6062
查看次数

标签 统计

apache-spark ×2

apache-spark-sql ×2

scala ×2

types ×1