小编Pra*_*jan的帖子

为什么sortBy转换会触发Spark作业?

根据Spark文档,只有RDD操作可以触发Spark作业,并且在对其调用操作时会对延迟进行转换评估.

我看到sortBy转换函数立即应用,它在SparkUI中显示为作业触发器.为什么?

partitioning partitioner apache-spark rdd

9
推荐指数
2
解决办法
1380
查看次数

在多个双数据类型列中查找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
查看次数

如何在 Spark 中找到分组数据的精确中位数

我需要使用 Scala 计算 Spark 中 Double 数据类型的分组数据集的精确中位数。

它与类似查询不同:在 Spark SQL 中查找多个双数据类型列的中位数。这个问题是关于分组数据的查找数据,而另一个问题是关于在 RDD 级别上查找中位数。

这是我的示例数据

scala> sqlContext.sql("select * from test").show()

+---+---+
| id|num|
+---+---+
|  A|0.0|
|  A|1.0|
|  A|1.0|
|  A|1.0|
|  A|0.0|
|  A|1.0|
|  B|0.0|
|  B|1.0|
|  B|1.0|
+---+---+
Run Code Online (Sandbox Code Playgroud)

预期答案:

+--------+
| Median |
+--------+
|   1    |
|   1    |
+--------+
Run Code Online (Sandbox Code Playgroud)

我尝试了以下选项,但没有运气:

1)Hive函数百分位数,仅适用于BigInt。

2) Hive 函数percentile_approx,但它没有按预期工作(返回 0.25 vs 1)。

scala> sqlContext.sql("select percentile_approx(num, 0.5) from test group by id").show()

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

scala apache-spark apache-spark-sql

3
推荐指数
1
解决办法
2万
查看次数