hiveContext
。df
。df
注册了DataFrame df.registerTempTable("TESTTABLE")
。HiveThriftServer2.startWithContext(hiveContext)
。TESTTABLE包含1,000,000个条目,列是ID(INT)和NAME(VARCHAR)
+-----+--------+
| ID | NAME |
+-----+--------+
| 1 | Hello |
| 2 | Hello |
| 3 | Hello |
| ... | ... |
使用Beeline我访问HiveThriftServer的SQL端点(在端口10000)并执行查询。 E.g。
SELECT * FROM TESTTABLE WHERE ID='3'
当我用执行的SQL语句检查数据库的QueryLog时,我看到了
/*SQL #:1000000 t:657*/ SELECT \"ID\",\"NAME\" FROM test;
因此没有谓词下推,因为缺少where子句。
这引起了以下问题:
如果我在Spark SQLContext中创建一个DataFrame df
并调用
df.filter( df("ID") === 3).show()
我观察
/*SQL #:1*/SELECT \"ID\",\"NAME\" FROM test WHERE ID = 3;
正如所料。
答案 0 :(得分:0)
回答可能为时已晚。 在这种情况下,此操作不起作用,因为ID定义为Int,并且在原始查询中您正在传递字符串('3')。谓词下推也会查找相同的列名称和类型。