【发布时间】:2017-03-08 10:52:59
【问题描述】:
我有这个测试数据:
val data = List(
List(47.5335D),
List(67.5335D),
List(69.5335D),
List(444.1235D),
List(677.5335D)
)
我预计中位数为 69.5335。 但是当我尝试使用此代码找到确切的中位数时:
df.stat.approxQuantile(column, Array(0.5), 0)
它给了我: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)
所以我正在创建临时表。然后在里面搜索,然后计算结果。只是为了测试。
【问题讨论】:
-
我遇到了同样的问题。关于如何解决这个问题的任何建议?
-
@Nimi 我记得我已经用自己的 udf 解决了它。
-
您介意分享一下吗?我不知道如何使用 udf 聚合列的值。我想将计算保留在 spark 中,而不是提取值。
标签: scala apache-spark