Я использую spark 2.0.0 для запроса таблицы кустов:
мой sql:
select * from app.abtestmsg_v limit 10
Да, я хочу получить первые 10 записей из представления app.abtestmsg_v
.
Когда я запускаю этот sql в spark-shell, он работает очень быстро, ИСПОЛЬЗУЙТЕ около 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()
Из информационного журнала я нахожу: хотя я использую «limit 10», чтобы сообщить spark, что мне нужны только первые 10 записей, но spark по-прежнему сканирует и читает все файлы (в моем случае исходные данные этого представления содержит 100 файлов, и размер каждого файла составляет около 1 ГБ) представления. Таким образом, имеется около 100 задач, каждая задача считывает файл, и все задачи выполняются последовательно. Я трачу почти 15 минут на выполнение этих 100 задач!!!!! но я хочу просто получить первые 10 записей.
Итак, я не знаю, что делать и что не так;
Кто-нибудь может дать мне несколько предложений?