我想从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()
答案 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()