Spark SQL не показывает таблицы - PullRequest
0 голосов
/ 13 марта 2019

Я использую Spark 2.4.0 на EMR 5.21

Я работаю с секционированной таблицей на S3 - я замечаю следующее:

Если я загружаюиспользуя данные: spark.read.parquet("s3://my_bucket/my_table").createOrReplaceTempView("my_table");

Я могу легко сделать следующее: spark.sql("select * from my_table").show и получить результаты.spark.sql("show tables").show также показывает «my_table» в своих результатах.

Однако я замечаю, что следующее не работает:

scala> spark.sql("show create table my_table").show
org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'my_table' not found in database 'default';
  at org.apache.spark.sql.catalyst.catalog.SessionCatalog.requireTableExists(SessionCatalog.scala:185)
  at org.apache.spark.sql.catalyst.catalog.SessionCatalog.getTableMetadata(SessionCatalog.scala:428)
  at org.apache.spark.sql.execution.command.ShowCreateTableCommand.run(tables.scala:915)
  at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:70)

И большинствоважно, поскольку я хочу, чтобы разделы были доступны:

scala> spark.sql("msck repair table my_table").show
org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'my_table' not found in database 'default';
  at org.apache.spark.sql.catalyst.catalog.SessionCatalog.requireTableExists(SessionCatalog.scala:185)
  at org.apache.spark.sql.catalyst.catalog.SessionCatalog.getTableMetadata(SessionCatalog.scala:428)
  at org.apache.spark.sql.execution.command.AlterTableRecoverPartitionsCommand.run(ddl.scala:600)
  at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:70)
  at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:68)

Любая помощь?С точки зрения того, что я пытаюсь достичь, я использую spark.sql.sources.partitionOverwriteMode, установленный на динамический, и использую

    some_df
      .write
      .option("compression", "snappy")
      .format("parquet")
      .mode(SaveMode.Overwrite)
      .insertInto("my_table")

, чтобы обновить разделы в моей таблице S3.

...