[英]How to load data into hive external table using spark?
我想尝试使用spark将数据加载到配置单元外部表中。 请帮助我,如何使用Scala代码或Java将数据加载到Hive中
提前致谢
假设配置单元外部表已经使用类似方法创建,
CREATE EXTERNAL TABLE external_parquet(c1 INT, c2 STRING, c3 TIMESTAMP)
STORED AS PARQUET LOCATION '/user/etl/destination'; -- location is some directory on HDFS
并且您要在Spark中创建一个现有的dataFrame / RDD。
import sqlContext.implicits._
val rdd = sc.parallelize(List((1, "a", new Date), (2, "b", new Date), (3, "c", new Date)))
val df = rdd.toDF("c1", "c2", "c3") //column names for your data frame
df.write.mode(SaveMode.Overwrite).parquet("/user/etl/destination") // If you want to overwrite existing dataset (full reimport from some source)
如果您不想覆盖数据集中的现有数据...
df.write.mode(SaveMode.Append).parquet("/user/etl/destination") // If you want to append to existing dataset (incremental imports)
**我尝试过类似的情况并获得令人满意的结果。我使用json中的架构处理avro数据。我通过spark流传输了kafka主题,并将数据持久存储在hdfs中,这是外部表的位置,因此每2秒(数据的流式传输持续时间将存储在单独文件中的hdfs中,并且还将附加配置单元外部表)。
这是简单的代码片段
val messages = KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](ssc, kafkaConf, topicMaps, StorageLevel.MEMORY_ONLY_SER)
messages.foreachRDD(rdd =>
{
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
val dataframe = sqlContext.read.json(rdd.map(_._2))
val myEvent = dataframe.toDF()
import org.apache.spark.sql.SaveMode
myEvent.write.format("parquet").mode(org.apache.spark.sql.SaveMode.Append).save("maprfs:///location/of/hive/external/table")
})
不要忘记在应用程序结尾处停止' SSC '。
PS: 请注意,在创建外部表时,请确保所创建的表的架构与数据框架构相同。 因为当转换成一个只不过是一个表的数据帧时,这些列将按字母顺序排列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.