【发布时间】:2018-11-09 14:16:54
【问题描述】:
在驱动程序中,我使用 Spark SQL 将从 Twitter 流中提取的一些数据保存在表中。我没有使用 Hive,所以它被保存到 spark-warehouse 目录。然后我尝试通过spark-shell 访问它,但是sql() 命令无法使用该表(它甚至没有在sqlContext.tables 中列出)。由驱动程序和 spark-shell 创建的表都保存在同一个文件夹中,但对于它们不是源自的应用程序是不可见的。
Spark 应该那样做吗?我错过了什么吗?有没有办法共享这些表格?
更新:我设法拼凑了一个例子。我使用以下代码提交了驱动程序:
Seq(1).toDF("number").write.saveAsTable("number")
spark.sqlContext.sql("select * from number").show
结果是:
+------+
|number|
+------+
| 1|
+------+
然后我在spark-shell 中运行以下命令:
scala> sql("select * from number")
org.apache.spark.sql.AnalysisException: Table or view not found: number; line 1 pos 14
更新 2。我设法通过将空的 DataFrame 附加到表来创建解决方法,因此我可以正常访问它。
scala> spark.sqlContext.emptyDataFrame.write.mode(SaveMode.Append).saveAsTable("number")
scala> sql("select * from number")
res2: org.apache.spark.sql.DataFrame = [number: int]
scala> sql("select * from number").show
+------+
|number|
+------+
| 1|
+------+
但现在驱动程序无法通过 Spark SQL 访问表。似乎该表仅适用于最近写入它的应用程序。有什么办法可以避免吗?
【问题讨论】:
标签: scala apache-spark apache-spark-sql