Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 带有配置单元数据源的SparkSQL将对head()执行完整表扫描?_Apache Spark_Hive_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark 带有配置单元数据源的SparkSQL将对head()执行完整表扫描?

Apache spark 带有配置单元数据源的SparkSQL将对head()执行完整表扫描?,apache-spark,hive,pyspark,apache-spark-sql,Apache Spark,Hive,Pyspark,Apache Spark Sql,执行此操作时: 在Hive shell中从表_namelimit 5中选择*,需要18秒才能完成 但当我在SparkSQL中编写这篇文章时: table = hiveCtx.sql("select * from table_name") print table.head() 我写作的时候也是这样 table = hiveCtx.sql("select * from table_name limit 5") 或 我看到它会导致HiveTableScan,在实际执行head()之前需要30多分钟

执行此操作时:
在Hive shell中从表_namelimit 5中选择*,
需要18秒才能完成

但当我在SparkSQL中编写这篇文章时:

table = hiveCtx.sql("select * from table_name")
print table.head()
我写作的时候也是这样

table = hiveCtx.sql("select * from table_name limit 5")

我看到它会导致HiveTableScan,在实际执行
head()
之前需要30多分钟才能完成,因为表非常大

我想知道这是否是SparkSQL的适当行为?还是我做错了什么

我正在使用Spark 1.6.3。

我以前遇到过同样的“问题”,一位同事告诉我这一点

最佳优化是Spark可以将每个执行器限制为N,然后在最终结果集中限制为N

因此,作业被分配到多个执行器上,每个执行器都试图按原样执行查询,然后数据返回到
head()
调用,从而限制了数据集和以后的时间,从而导致延迟

根据这种逻辑,我可以想象
limit 5
应该比纯
select*
table(“table_name”)
执行得更快

我个人还没有对这个过程进行足够的研究,以知道这是否是真的,但当您考虑到执行者可能会死亡,或者一些人可能只查询未达到指定限制的数据子集时,这是有意义的,在这种情况下,这些结果需要与另一个结果集合并

我以前也遇到过同样的“问题”,一位同事告诉我这一点

最佳优化是Spark可以将每个执行器限制为N,然后在最终结果集中限制为N

因此,作业被分配到多个执行器上,每个执行器都试图按原样执行查询,然后数据返回到
head()
调用,从而限制了数据集和以后的时间,从而导致延迟

根据这种逻辑,我可以想象
limit 5
应该比纯
select*
table(“table_name”)
执行得更快


我个人还没有对这个过程进行足够的研究,以知道这是否是真的,但当您考虑到执行者可能会死亡,或者一些人可能只查询未达到指定限制的数据子集时,这是有意义的,在这种情况下,这些结果需要与另一个结果集合并

谢谢大家!!因此,SparkSQL和Hive之间相同SQL的执行逻辑不同?不一定。例如,您可以将Spark限制为1个执行器,但这违背了分布式处理的目的谢谢!因此,SparkSQL和Hive之间相同SQL的执行逻辑不同?不一定。例如,您可以将Spark限制为1个执行器,但这会破坏分布式处理的目的
table = hiveCtx.table("table_name")