【发布时间】:2015-12-05 22:31:47
【问题描述】:
所以我写了关于如何平均我的数据框中的每个 FloatType 列的基础(不起作用),如下所示:
val descript = df.dtypes
var decimalArr = new ListBuffer[String]()
for(i <- 0 to (descript.length - 1)) {
if(descript(i)._2 == "FloatType") {
decimalArr += descript(i)._1
}
}
//Build Statsitical Arguments for DataFrame Pass
var averageList = new ListBuffer[String]()
for(i <- 0 to (decimalArr.length - 1)){
averageList += "avg(" + '"' + decimalArr(i) + '"' + ")"
}
//sample statsitical call
val sampAvg = df.agg(averageList).show
averageList生成的例子是:
ListBuffer(avg("offer_id"), avg("decision_id"), avg("offer_type_cd"), avg("promo_id"), avg("pymt_method_type_cd"), avg("cs_result_id"), avg("cs_result_usage_type_cd"), avg("rate_index_type_cd"), avg("sub_product_id"))
明显的问题是 val sampAvg = df.agg(averageList).show 不允许 listBuffer 作为输入。因此,即使将它带入 .toString 也行不通,它需要 org.apache.spark.sql.Column*。有谁知道我可以按照我正在尝试的方式做某事的方法。
旁注我使用的是 Spark 1.3
【问题讨论】:
-
你试过 sc.parallelize on averageList 然后 .toDF() 函数吗?
标签: scala apache-spark apache-spark-sql