我想在 Tableau 中访问 Spark SQL 的内存数据。
我阅读了本教程并执行以下操作:http://downloads.tableau.com/beta/Tableau%20Spark%20SQL%20Setup%20Instructions.pdf
在 Linux 上的 VirtualBox 中:
- 从 http://www.apache.org/dyn/closer.lua/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz 下载了带有Hadoop 2.6的SparkSQL 1.5.2
- 运行 start-master.sh 和 start-slaves.sh
-
运行以下命令:
start-thriftserver.sh --大师 spark://localhost:7077 --driver-class-path $CLASSPATH --hiveconf hive.server2.thrift.bind.host localhost --hiveconf hive.server2.thrift.port 10001
在主机站点 (Windows 8) 上:
- 下载的 Tableau,
- 转发端口(主机上的 8124 = 客户机上的 10001)
- 安装了 Spark ODBC 驱动程序。
之后,我成功地将 Tableau 与 SparkSQL 连接起来。
现在,我想在 Spark-shell 中创建一些表,并使用 Tableau 访问它们。我在火花外壳上运行以下命令:
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 Server,但仍然没有可见的数据。问题是:
- 我不知道该怎么做才能使"人员"表对 Tableau 可见。
- 我不知道,是什么决定了 Tableau 可以访问 Spark SQL 中的数据。
如何使这些数据对 Tableau 可见?
使用 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
完成后,您应该会看到来自任何可以与正在使用的 Hive 元存储(包括 Tableau)通信的客户端people
表。