ser*_*eda 5 scala apache-spark
我有这个测试数据:
val data = List(
List(47.5335D),
List(67.5335D),
List(69.5335D),
List(444.1235D),
List(677.5335D)
)
Run Code Online (Sandbox Code Playgroud)
我预计中位数为69.5335.但是,当我尝试使用此代码找到确切的中位数时:
df.stat.approxQuantile(column, Array(0.5), 0)
Run Code Online (Sandbox Code Playgroud)
它给了我:444.1235
为什么会如此以及如何解决?
我是这样做的:
val data = List(
List(47.5335D),
List(67.5335D),
List(69.5335D),
List(444.1235D),
List(677.5335D)
)
val rdd = sparkContext.parallelize(data).map(Row.fromSeq(_))
val schema = StructType(Array(
StructField("value", DataTypes.DoubleType, false)
))
val df = sqlContext.createDataFrame(rdd, schema)
df.createOrReplaceTempView(tableName)
val df2 = sc.sql(s"SELECT value FROM $tableName")
val median = df2.stat.approxQuantile("value", Array(0.5), 0)
Run Code Online (Sandbox Code Playgroud)
所以我正在创建临时表.然后在其中搜索,然后计算结果.它只是用于测试.
小智 0
这是我本地的结果。你也做类似的事情吗?
val data = List(
List(47.5335D),
List(67.5335D),
List(69.5335D),
List(444.1235D),
List(677.5335D)
)
val df = data.flatten.toDF
df.stat.approxQuantile("value", Array(0.5), 0)
// res18: Array[Double] = Array(67.5335)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4841 次 |
| 最近记录: |