相关疑难解决方法(0)

如何使用Spark查找中值和分位数

如何RDD使用分布式方法,IPython和Spark 找到整数的中位数?的RDD是约700 000元,因此过大,以收集和发现中位数.

这个问题与这个问题类似.但是,问题的答案是使用Scala,我不知道.

如何使用Apache Spark计算精确中位数?

使用Scala答案的思考,我试图在Python中编写类似的答案.

我知道我首先要排序RDD.我不知道怎么.我看到sortBy(按给定的方式对此RDD进行排序keyfunc)和sortByKey(对此进行排序RDD,假设它由(键,值)对组成.)方法.我认为两者都使用键值,而我RDD只有整数元素.

  1. 首先,我在考虑做什么myrdd.sortBy(lambda x: x)
  2. 接下来我将找到rdd(rdd.count())的长度.
  3. 最后,我想在rdd的中心找到元素或2个元素.我也需要这个方法的帮助.

编辑:

我有个主意.也许我可以索引我的RDD然后key = index和value = element.然后我可以尝试按价值排序?我不知道这是否可行,因为只有一种sortByKey方法.

python median apache-spark rdd pyspark

55
推荐指数
3
解决办法
6万
查看次数

在多个双数据类型列中查找spark SQL的中位数

我需要找到多个双数据类型列的中位数.请求建议找到正确的方法.

下面是我的一个列的示例数据集.我期待我的样本中值返回为1.

  scala> sqlContext.sql("select num from test").show();
+---+
|num|
+---+
|0.0|
|0.0|
|1.0|
|1.0|
|1.0|
|1.0|
+---+
Run Code Online (Sandbox Code Playgroud)

我尝试了以下选项

1)Hive UDAF百分位数,它仅适用于BigInt.

2)Hive UDAT percentile_approx,但它不能按预期工作(返回0.25 vs 1).

sqlContext.sql("从test中选择percentile_approx(num,0.5)".show();

+----+
| _c0|
+----+
|0.25|
+----+
Run Code Online (Sandbox Code Playgroud)

3)Spark窗口函数percent_rank-找到中位数我看到的方法是查找高于0.5的所有percent_rank并选择max percent_rank的相应num值.但它并不适用于所有情况,特别是当我有记录计数时,在这种情况下,中位数是排序分布中的中间值的平均值.

同样在percent_rank中,因为我必须找到多列的中位数,我必须在不同的数据帧中计算它,这对我来说是一个很复杂的方法.如果我的理解不对,请纠正我.

+---+-------------+
|num|percent_rank |
+---+-------------+
|0.0|0.0|
|0.0|0.0|
|1.0|0.4|
|1.0|0.4|
|1.0|0.4|
|1.0|0.4|
+---+---+
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-sql hive-udf

6
推荐指数
1
解决办法
3070
查看次数

approxQuantile在Spark(Scala)中给出错误的中位数?

我有这个测试数据:

 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)

所以我正在创建临时表.然后在其中搜索,然后计算结果.它只是用于测试.

scala apache-spark

5
推荐指数
1
解决办法
4841
查看次数