Pyspark查询配置单元甚至最终结果非常慢

时间:2017-02-17 11:57:43

标签: apache-spark pyspark apache-spark-sql

我使用spark 2.0.0来查询hive表:

我的sql是:

select * from app.abtestmsg_v limit 10

是的,我想从视图app.abtestmsg_v获取前10条记录。

当我在spark-shell中运行这个sql时,它非常快,使用 2秒

但是当我尝试通过我的python代码实现这个查询时,问题出现了。

我正在使用Spark 2.0.0并编写一个非常简单的pyspark程序,代码是:

以下是我的pyspark代码:

from pyspark.sql import HiveContext
from pyspark.sql.functions import *
import json
hc = HiveContext(sc)
hc.setConf("hive.exec.orc.split.strategy", "ETL")
hc.setConf("hive.security.authorization.enabled",false)
zj_sql = 'select * from app.abtestmsg_v limit 10'
zj_df = hc.sql(zj_sql)
zj_df.collect()

以下是我的scala代码:

val hive = new org.apache.spark.sql.hive.HiveContext(sc)
hive.setConf("hive.exec.orc.split.strategy", "ETL")
val df = hive.sql("select * from silver_ep.zj_v limit 10")
df.rdd.collect()

从信息日志中,我发现: 虽然我用“限制10 ”告诉火花,我只想要前10条记录,但是火花仍然扫描并读取所有文件(在我的例子中,这个视图的源数据包含100个文件,每个文件的大小约为1G),因此,有近100个任务,每个任务读取一个文件,所有任务都是串行执行的。我使用近乎 15分钟来完成这100项任务!!!!!但我想要的只是获得第一个 10 记录。

所以,我不知道该做什么和出了什么问题;

Anybode可以给我一些建议吗?

0 个答案:

没有答案