我创建了一个启动 spark ( local[*]
) 的 Java 应用程序,并利用它读取 csv 文件作为Dataset<Row>
并使用 createOrReplaceTempView
创建一个临时视图。
此时,我能够利用SQL来查询应用程序内部的视图。
出于开发和调试目的,我想做的是从应用程序外部以交互方式执行查询。
有什么提示吗?
提前致谢
你可以使用 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 配置和当前数据库。