在我的java应用程序之外查询我的临时表

时间:2017-10-24 14:12:22

标签: apache-spark apache-spark-sql

我创建了一个启动spark(local[*])的java应用程序,并利用它将csv文件作为Dataset<Row>读取,并使用createOrReplaceTempView创建临时视图。

此时我可以利用SQL查询应用程序中的视图。

出于开发和调试的目的,我想做的是从应用程序外部以交互方式执行查询。

任何提示?

提前致谢

1 个答案:

答案 0 :(得分:0)

你可以使用spark的DeveloperApi - HiveThriftServer2

@DeveloperApi
  def startWithContext(sqlContext: SQLContext): Unit = {
    val server = new HiveThriftServer2(sqlContext)

您在应用程序中只需要执行SQLContext并按如下方式使用它:

HiveThriftServer2.startWithContext(sqlContext)

这将启动hive thrift服务器(默认情况下在端口10000上)并且您可以使用sql客户端 - 例如beeline用于访问和查询临时表中的数据。

此外,您还需要设置--conf spark.sql.hive.thriftServer.singleSession=true,以便查看临时表。默认情况下,它设置为false,因此每个连接都有自己的会话,并且他们看不到其他临时表。

  

“spark.sql.hive.thriftServer.singleSession” - 设置为true时,Hive Thrift服务器在单个会话中运行   模式。所有JDBC / ODBC连接都共享临时视图,函数注册表,SQL配置和当前数据库。