有没有办法在 PySpark 中使用 Impala 而不是 Hive?

Is there a way to use Impala rather than Hive in PySpark?

我的查询在 Impala 中有效,但在 Hive 中无效。我正在创建一个简单的 PySpark 文件,例如:

from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext, HiveContext
sconf = SparkConf()
sc = SparkContext.getOrCreate(conf=sconf)
sqlContext = HiveContext(sc)

sqlContext.sql('use db1')
...

当我 运行 这个脚本时,它的查询得到了我在 Hive 编辑器中 运行 它们时得到的错误(它们在 Impala 编辑器中工作)。有没有办法解决这个问题,以便我可以使用 Impala 在脚本中 运行 这些查询?

您可以通过 JDBC Data Source 在 Spark SQL 中使用 Impala 或 HiveServer2。这需要您安装 Impala JDBC 驱动程序,并在 Spark 应用程序中配置与 Impala 的连接。但是 "you can" 并不意味着 "you should",因为它会产生开销并创建额外的依赖关系,而没有任何特别的好处。

通常(这就是您当前的应用程序正在尝试做的),Spark SQL 直接针对底层文件系统运行,不需要通过 HiveServer2 或 Impala 协调器。在这种情况下,Spark 仅(重新)使用 Hive Metastore 来检索元数据——数据库和 table 定义。