|
@@ -94,17 +94,43 @@ object makedata_ad_33_addFeatureToHive_20250708 {
|
|
|
throw new IllegalArgumentException("表中不存在 'mid' 字段,请检查字段名")
|
|
|
}
|
|
|
|
|
|
- val mid = Option(record.getString(midIndex))
|
|
|
- .getOrElse("")
|
|
|
+ // 4. 处理 mid 字段(支持非字符串类型转换为字符串)
|
|
|
+ val midColumn = columns(midIndex)
|
|
|
+ val midType = midColumn.getTypeInfo.getTypeName // 获取 mid 字段类型
|
|
|
+ val midValue: Any = midType match {
|
|
|
+ case "STRING" => record.getString(midIndex)
|
|
|
+ case "BIGINT" => record.getBigint(midIndex) // 长整型
|
|
|
+ case "DOUBLE" => record.getDouble(midIndex) // 浮点型
|
|
|
+ case "BOOLEAN" => record.getBoolean(midIndex) // 布尔型
|
|
|
+ }
|
|
|
+ val mid = Option(midValue).map(_.toString).getOrElse("") // 转换为字符串,null 转为空字符串
|
|
|
|
|
|
+ // 5. 处理所有字段(非字符串类型转为字符串)
|
|
|
val recordMap = columns.zipWithIndex
|
|
|
.map { case (column, index) =>
|
|
|
- // 获取字段值,保留 null(不转换为空字符串)
|
|
|
- val value: String = record.getString(index) match {
|
|
|
- case null => null // 保留 null 值
|
|
|
- case value => value // 非 null 值转换为字符串
|
|
|
+ val columnName = column.getName
|
|
|
+ val columnType = column.getTypeInfo.getTypeName // 获取字段类型
|
|
|
+
|
|
|
+ // 根据字段类型获取值并转换为字符串
|
|
|
+ val value: String = columnType match {
|
|
|
+ case "STRING" =>
|
|
|
+ val str = record.getString(index)
|
|
|
+ if (str == null) null else str // 字符串类型直接保留(null 保持 null)
|
|
|
+
|
|
|
+ case "BIGINT" =>
|
|
|
+ val num = record.getBigint(index)
|
|
|
+ if (num == null) null else num.toString // 长整型转字符串
|
|
|
+
|
|
|
+ case "DOUBLE" =>
|
|
|
+ val num = record.getDouble(index)
|
|
|
+ if (num == null) null else num.toString // 浮点型转字符串
|
|
|
+
|
|
|
+ case "BOOLEAN" =>
|
|
|
+ val bool = record.getBoolean(index)
|
|
|
+ if (bool == null) null else bool.toString // 布尔型转字符串("true"/"false")
|
|
|
}
|
|
|
- column.getName -> value
|
|
|
+
|
|
|
+ columnName -> value
|
|
|
}
|
|
|
.toMap
|
|
|
|