Spark saveAsTable是否真的创建了表?

时间:2019-01-23 08:28:23

标签: apache-spark hive

这可能是一个愚蠢的问题,因为缺乏火花的一些基本知识,我尝试这样做:

SparkSession spark = SparkSession.builder().appName("spark ...").master("local").enableHiveSupport().getOrCreate();
Dataset<Row> df = spark.range(10).toDF();
df.write().saveAsTable("foo");  

这将在Hive中的“默认”数据库下创建表,当然,我可以随时从表中获取数据。

我更新了上面的代码以摆脱“ enableHiveSupport”,

SparkSession spark = SparkSession.builder().appName("spark ...").master("local").getOrCreate();
Dataset<Row> df = spark.range(10).toDF();
df.write().saveAsTable("bar"); 

代码运行正常,没有任何错误,但是当我尝试“从栏选择*”时,火花说,

Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'bar' not found in database 'default';

所以我在这里有2个问题,

1)是否可以创建“原始”火花表,而不是蜂巢表?我知道Hive像mysql一样在数据库中保留元数据,spark是否也具有类似的机制?

2)在第二个代码段中,调用saveAsTable时,火花实际上会创建什么?

非常感谢。

1 个答案:

答案 0 :(得分:0)

检查以下答案:

  1. 如果只想在raw中创建createOrReplaceTempView表可以为您提供帮助。对于第二部分,请检查下一个答案。
  2. 默认情况下,如果您在数据帧上调用saveAsTable,那么如果您使用enableHiveSupport,它将把表持久化到Hive元存储中。如果我们不enableHiveSupport,表将由Spark管理,数据将位于spark-warehouse位置。重新启动spark会话后,您将丢失这些表。