SparkSQL,Thrift Server和Tableau

use*_*309 8 hive apache-spark apache-spark-sql

我想知道是否有一种方法可以使sparkSQLsqlContext直接被其他进程看到,例如Tableau.

我做了一些关于thrift服务器的研究,但我没有找到任何具体的解释.它是Hive(数据库)和应用程序(客户端)之间的中间件吗?如果是这样,我是否需要在我的spark程序中写入Hive表?

当我使用Beeline从thrift服务器检查表时,有一个字段isTempTable.我能知道它是什么意思吗?我猜它是sqlContextthrift服务器中的一个临时表,因为我读了一些关于它的火花驱动程序,并且所有缓存的表都可以通过多个程序看到.我的困惑在于,如果是司机程序,工人在哪里?

总结一下,

  1. 我应该在哪里写我的DataFrame,或者在sqlContext中写表?我应该使用哪种方法(比如dataFrame.write.mode(SaveMode.Append).saveAsTable())?
  2. 是否应将默认设置用于thrift服务器?或者是必要的变化?

谢谢

Ewa*_*ith 8

我假设你现在已经开始了,但对于遇到这个答案的人来说,Thrift服务器实际上是JDBC连接和SparkSQL之间的代理.

一旦你运行了Thrift(参见Spark文档的基本介绍),你就可以使用Hive JDBC驱动程序通过JDBC连接到Thrift,然后使用HiveContext将你的SQL查询中继到Spark.

如果您已启动并运行完整的Hive Metastore,您应该能够立即在JDBC客户端中看到Hive表,否则您可以通过在JDBC客户端中运行这样的命令来按需创建表:

CREATE TABLE data1 USING org.apache.spark.sql.parquet OPTIONS (path "/path/to/parquetfile");
CREATE TABLE data2 USING org.apache.spark.sql.json OPTIONS (path "/path/to/jsonfile");
Run Code Online (Sandbox Code Playgroud)

希望这有所帮助.