java.lang.NumberFormatException:对于输入字符串:“[14.8678]”
java.lang.NumberFormatException: For input string: "[14.8678]"
我有 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 中获取数字更容易?
当您收集数据框时,它会为您提供一个 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)
我有 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 中获取数字更容易?
当您收集数据框时,它会为您提供一个 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)