spark saveastable真的创建了一个表吗?

e3bfsja2  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(563)

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

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

这将在配置单元中的“默认”数据库下创建表,当然,我可以随时从表中获取数据。
我更新了上面的代码以摆脱“enablehivesupport”,

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

代码运行良好,没有任何错误,但是当我尝试“select*from bar”时,spark说,

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

所以我有两个问题,
1) 是否可以创建“原始”spark表,而不是hive表?我知道hive像mysql一样保存数据库中的元数据,spark也有类似的机制吗?
2) 在第二段代码中,调用saveastable时spark实际创建了什么?
非常感谢。

68bkxrlz

68bkxrlz1#

检查以下答案:
如果你想创造 raw 表格仅在spark中 createOrReplaceTempView 我可以帮你。第二部分,检查下一个答案。
默认情况下,如果您调用 saveAsTable 在您的Dataframe上,如果您使用 enableHiveSupport . 如果我们不 enableHiveSupport ,表格将由spark管理,数据将在 spark-warehouse 位置。重新启动spark会话后,您将丢失这些表。

相关问题