为什么使用Spark中使用HiveContex的分位数计算非常慢



我使用色调使用10 GB CSV文件创建了Hive表。然后尝试运行SQL查询。在处理数据时,它的讲话长期超过2小时。有人可以告诉我这是否是火花问题吗?或者我做错了。
我尝试了所有可能的组合,例如更改执行者,核心和执行者内存的数量。

 - 驾驶员记忆10G  -num-executors 10   - 执行 - 记忆10G   - 执行核心10 

我通过更改10、15,20,50,100的数字执行器进行测试,并且用于内存和内核。
谈论群集,它具有6个节点380 内核和1TB内存。

我的SQL查询:选择percenele_approx(x1,阵列(0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9))为x1_quantiles,percenele_approx(x2,阵列(0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9))为x2_quantiles,percenele_approx(x3,阵列(0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9))为x3_quantiles来自mytest.test1

代码非常简单

    val query= args(0)
    val sparkConf= new SparkConf().setAppName("Spark Hive")
    val sc = new SparkContext(sparkConf)
    val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
    sqlContext.cacheTable(" mytest.test1")
    val start = System.currentTimeMillis()
    val testload=sqlContext.sql(query)
    testload.show()
    val end = System.currentTimeMillis()
    println("Time took " + (end-start) + " ms")

好吧,这不是火花问题。由于所需的排序和相关的改组,计算精确的分位数是分布式环境中昂贵的过程。由于您在不同的列上计算百分位数,因此该过程多次重复多次,如果变量不密切相关,可能会特别昂贵。通常,除非必要,否则您应该计算精确的百分位数。

spark 2.0.0实现可调方法用于分位数近似,如果您使用的是较早版本,则可以通过简单采样实现相似的结果。查看如何使用Spark

找到中位数

相关内容

  • 没有找到相关文章

最新更新