先简单的贴贴代码,后面会完善一下。
一,spark sql 读取hive表
这里通过catalog查询表的字段信息,然后 查询出来的字段colStr 要给下面的doris使用。

注意:我这里是直接拿取的hive表所有的字段。
二,spark自定义输出
这里就是简单封装了一下

实现的效果:

三,通过stream load方式数据写入doris
循环遍历DataFrame之后写入到doris里面:
val dorisStreamLoader = new DorisStreamLoad("192.168.5.xx:8040", "example_db", "assuer_order_test", "root", "root")
val cumsArrays = colStr.split(",")
val fieldDelimiter: String = "\t"
val lineDelimiter: String = "\n"
val NULL_VALUE: String = "\\N"
val maxRowCount = 5000
val maxRetryTimes = 3
data.rdd.foreachPartition(partition => {
val buffer = ListBuffer[String]()
var jsonArrays = new JSONArray()
partition.foreach(f = row => {
// val value: StringJoiner = new StringJoiner(fieldDelimiter)
// create one row string
val json = new JSONObject()
for (i <- 0 until row.size) {
val field = row.get(i)
val fieldName = cumsArrays(i)
if (field == null) {
// value.add(NULL_VALUE)
json.put(fieldName, NULL_VALUE)
} else {
// value.add(field.toString)
json.put(fieldName, field.toString)
}
}
jsonArrays.add(json)
// add one row string to buffer
//

本文介绍了如何使用Spark SQL从Hive表中读取数据,并通过自定义输出和stream load方式将数据高效写入Doris。在测试中,即使是包含上百字段、千万级别的数据,也能在本地IDEA环境中稳定运行,避免了OOM问题。相较于通过Flink、HDFS、Kafka的复杂流程,此方法更为简洁。
最低0.47元/天 解锁文章
1156





