ORC数据保存时外部table为空

External table is empty when ORC data is saved

我想将 ORC 数据从 Spark 数据帧写入外部 Hive table。当我将数据框保存为 table 时,数据被发送到现有的外部 table,但是,当我尝试将 ORC 格式的数据保存到目录中,然后从外部 table 读取此数据时=22=],不显示。

第二种情况数据缺失的原因是什么?

工作原理:

val dataDir = "/tmp/avro_data"
sql("CREATE EXTERNAL TABLE avro_random(name string, age int, phone string, city string, country string) STORED AS ORC LOCATION '$dataDir'")

dataframe
  .write
  .mode(SaveMode.Overwrite)
  .saveAsTable("avro_random")

sql("SELECT * FROM avro_random").show()

returns空外部的代码table:

val dataDir = "/tmp/avro_data"
sql("CREATE EXTERNAL TABLE avro_random(name string, age int, phone string, city string, country string) STORED AS ORC LOCATION '$dataDir'")

dataframe
  .write
  .mode(SaveMode.Overwrite)
  .orc(dataDir)

sql("SELECT * FROM avro_random").show()

只有 saveAsTable 可以与 Hive 一起使用。 如果您使用 .orc(dataDir),spark 将在没有 Hive 支持的情况下将 orc 写入 dataDir

对于第二种情况。如果你尝试通过 spark 从 dataDir 加载 orc,它将工作

dataframe
  .write
  .mode(SaveMode.Overwrite)
  .orc(dataDir)

// New code is below
val newDf = spark.read.orc(dataDir)
newDf.createOrReplaceTempView("avro_random_orc") // Register TMP table instead to support sql

sql("SELECT * FROM avro_random_orc").show()