当前位置: 首页 > 知识库问答 >
问题:

对于类似的查询,pyspark-hive上下文不返回结果,但SQL上下文返回结果

宰父飞白
2023-03-14
  • Spark 1.3.1(也尝试了Spark 1.5.1)
  • Hadoop 2.6(在CDH 5.4.0上)
  • Pyspark--主纱--num--执行者5--执行者-内存10g--驱动程序-内存4g--驱动程序-核心4
  • database.table有超过2k个分区
  • database.table在field1上分区(在where子句中使用)
from pyspark.sql import SQLContext
sqlContext = HiveContext(sc) 
qry = "select count(*) from database.table a where a.field1 = 'ABCD'"
results = sqlContext.sql(qry).collect()
  • 占用的时间不确定--我不得不停止查询的执行,因为它很快占用了我执行查询的edgenode上50%以上的系统资源。
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.parquetFile('hdfs_path_to_hive_table/field1=ABCD/')
df.select("field2").show()
    null
    null

我试过:

SET spark.sql.hive.metastorePartitionPruning=true

我还在遇到同样的问题。我让进程运行了一小段时间,以测试CPU使用率会上升到多高,它达到了2000%以上!

我听说Parket格式化文件在版本1.5之前可能是spark的一个问题,所以我在Spark1.5.1中使用这些附加设置的所有测试:

parquet.task.side.metadata=false
SET spark.sql.parquet.filterPushdown=true
SET spark.sql.parquet.cacheMetadata=false
    null
    null
    null

共有1个答案

师建德
2023-03-14

这可能不是HiveContext/SQLContext之间的差异,而是元数据来自HiveMetastore的表与SparkSQL数据源API之间的差异。我猜想,如果以同样的方式创建表,性能也会类似。

在data source API中,我们已经花了大量时间优化了许多分区的发现和处理,总的来说,我认为这个路径更容易使用/更快。

配置单元表的问题可能是从metastore下载所有分区元数据并将其转换为我们的内部格式。我们对所有分区都这样做,即使在本例中您只需要前20行。

 类似资料:
  • 我有下面的SQL查询,我在flink工作中使用。< code>mysql_table是使用JDBC连接器创建的,而< code>kafa_source表是从传入的kafka流创建的。 我在两者之间执行时态连接,当我在Flink的sql-client CLI中检查时,运行良好(用< code>flink-faker测试)。内部查询工作得非常好,并且正在打印结果。有人能帮助我找出这个问题吗? 编辑:我

  • 问题内容: 我创建了一个Hive表,该表从文本文件加载数据。但是它对所有查询返回的空结果集。 我尝试了以下命令: 命令被执行,并且表被创建。但是,对于所有查询,始终返回0行,包括 样本数据: 单行输入数据: 1 | 155190 | 7706 | 1 | 17 | 21168.23 | 0.04 | 0.02 | N | O | 1996-03-13 | 1996-02-12 | 1996-03-

  • 我有以下表格结构: 1-课程(course_id、course_nam、语言、course_price、create_date、average_rating、course_description、certifica_price、course_creator_id) 2-学生(学生证、钱包) 3-折扣(折扣id、折扣课程id、允许的许可课程id、开始日期、结束日期、百分比) 4-报名(student

  • 我正在玩mongob,并将一些测试数据{name:"david"}输入到“用户”集合中。我通过键入mongoshell验证了数据在MongoDB中 结果: 在 node.js 脚本中,使用以下代码: 不返回任何结果 我没有发现任何错误,也没有错误。请告知

  • 问题内容: 每当我尝试在mysql中调用存储过程以返回结果集时,它总是说“在给定上下文中不能返回结果集”。 我用谷歌搜索它,有人说这是mysql bug,有人说你应该改变你的mysqli驱动程序,然后.... 情况: 使用mysqli驱动程序客户端API库版本5.0.51a,PHP版本5.2.4-2ubuntu5.6,使用Zend 1.9 RC 1 Mysqli适配器。 我该怎么办!? 问题答案:

  • Firebase查询返回此查询的值 该项由model类捕获 但是,返回null