wuc*_*ang 5 apache-spark apache-spark-sql pyspark
我正在使用 spark 2.0.0 来查询 hive 表:
我的 sql 是:
select * from app.abtestmsg_v limit 10
Run Code Online (Sandbox Code Playgroud)
是的,我想从 view 中获取前 10 条记录app.abtestmsg_v。
当我在 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()
Run Code Online (Sandbox Code Playgroud)
下面是我的 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()
Run Code Online (Sandbox Code Playgroud)
从信息日志中,我发现:虽然我使用“ limit 10 ”来告诉 spark 我只想要前 10 条记录,但是 spark 仍然扫描并读取所有文件(在我的情况下,此视图的源数据包含 100 个文件和视图的每个文件的大小约为1G),因此,有近100个任务,每个任务读取一个文件,并且所有任务都是串行执行的。我用了将近15 分钟来完成这 100 个任务!!!!!!但我想要的只是获得前10条记录。
所以,我不知道该怎么做,出了什么问题;
任何人都可以给我一些建议吗?
| 归档时间: |
|
| 查看次数: |
933 次 |
| 最近记录: |