我使用色调使用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