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()
我想将 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()