【问题标题】:How to use in-memory tables in Tableau?如何在 Tableau 中使用内存表?
【发布时间】:2016-06-10 09:41:10
【问题描述】:

我想从 Tableau 中的 Spark SQL 访问内存中的数据。

我阅读了本教程并执行了以下操作: http://downloads.tableau.com/beta/Tableau%20Spark%20SQL%20Setup%20Instructions.pdf

在 VirtualBox 中的 Linux 上:

在主机站点上(Windows 8):

  • 已下载 Tableau,
  • 转发端口(主机上的 8124 = 来宾上的 10001)
  • 已安装 Spark ODBC 驱动程序。

之后,我成功地将 Tableau 与 SparkSQL 连接起来。

现在我想在 spark-shell 中创建一些表并使用 Tableau 访问它们。 我在 spark-shell 上运行这些命令:

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
case class Person(name: String, age: Int)
val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
people.registerTempTable("people")

之后,我再次连接到 Spark Thrift 服务器,但仍然看不到任何数据。问题是:

  • 我不知道如何才能使“人员”表对 Tableau 可见。
  • 我不知道,是什么决定了 Tableau 可以访问 Spark SQL 中的数据。

如何使这些数据对 Tableau 可见?

【问题讨论】:

  • 我应该使用 HiveThriftServer2.startWithContext(sqlContext.asInsanceOf[HiveContext]) 吗?如何设置 HiveContext 的主机和端口?
  • 使用SQLContext.setConf方法?

标签: apache-spark hive apache-spark-sql tableau-api


【解决方案1】:

您只需使用saveAsTable 或类似名称将您的表注册为永久表即可。

以下假设为 Spark 2.0,但也与其他版本类似。

val spark = SparkSession.builder.getOrCreate
import spark.implicits._

case class Person(name: String, age: Int)

val people = spark.read
  .option("inferSchema", true)
  .csv("examples/src/main/resources/people.txt")
  .as[Person]
people.write.saveAsTable("people")

saveAsTable 完成后,您应该会看到来自任何客户端的people 表,该表可以与正在使用的 Hive 元存储进行通信,包括 Tableau。

【讨论】:

  • 你好亚采克。从磁盘而不是内存中读取表显然会更慢。真的没有办法从 Tableau 中读取临时表吗?
猜你喜欢
  • 2021-10-31
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多