保存ORC数据时外部表为空

时间:2019-01-25 08:55:12

标签: scala apache-spark orc spark-hive

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

第二种情况可能是缺少数据的原因?

工作原理:

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()

返回空外部表的代码:

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()

1 个答案:

答案 0 :(得分:2)

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

对于第二种情况。如果您尝试通过火花从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()