我有Array[Row]
但实际上它总是只包含一个带有Double值的Row
。我想将此Double值提取到参数param1
:
val q1 = spark.sql("SELECT PERCENTILE(price,0.25) FROM table").collect()
val param1 = q1.mkString(",").toDouble
但是我收到了这个错误:
17/11/20 14:05:52 ERROR ApplicationMaster: User class threw exception: java.lang.NumberFormatException: For input string: "[14.8678]"
如何从Array[Row]
获取号码。目前,我使用collect()
,但是直接从DataFrame中获取数字可能更容易吗?
答案 0 :(得分:1)
收集数据框时,它会为您提供Array[Row]
,并且这些方括号是Row
对象的一部分。
sqlContext.range(2).collect.foreach(println)
[0]
[1]
Row
个对象具有预定义的函数,例如getDouble
,getString
,getDate
,用于从中获取值。
您还可以在语义上使用以下替代方法:
sqlContext.range(2).withColumn("doub", $"id".cast("double") ).map(_.getDouble(1) ).collect
res3: Array[Double] = Array(0.0, 1.0)
sqlContext.range(2).withColumn("doub", $"id".cast("double") ).map(_.getAs[Double](1) ).collect
res4: Array[Double] = Array(0.0, 1.0)
sqlContext.range(2).withColumn("doub", $"id".cast("double") ).map(_.getAs[Double]("doub") ).collect
res5: Array[Double] = Array(0.0, 1.0)
sqlContext.range(2).withColumn("doub", $"id".cast("double") ).select("doub").as[Double].collect
res9: Array[Double] = Array(0.0, 1.0)