scala - 更改 Rw Spark scala 的 getValuesMap
问题描述
我正在与 ForeachWriter[Row] 一起实现自定义火花接收器。
对于流程函数,我想将字段的值作为 int 获取。因此,如果我假设val row = Row("city","name","age")
我想将年龄作为 Int 并将其余字段作为字符串。
def process(row: Row) = {
val fieldNames = row.schema.fieldNames
val rowAsMap = row.getValuesMap(fieldNames)
使用 getValuesMap 每个字段都被解析为一个字符串。
我考虑过模式匹配来改变 getValuesMap 函数:
val rowAsMap = fieldNames.map {
case "age" => row.getAs[Int]("age")
case _ => row.getAs[String]
}.toMap
这不起作用,因为它的年龄总是写为接收器中的字符串,任何帮助/想法,以从 Row 获取预期类型的值
解决方案
我不知道你为什么要把那种类型转换逻辑放在里面ForEachWriter[Row]
。如果您希望 age 对其Int
调用者负责,请将age
内部 Row 的模式转换为Int
,不是吗?
另外,我认为没有必要这样做-
val rowAsMap = fieldNames.map {
case "age" => row.getAs[Int]("age")
case _ => row.getAs[String]
}.toMap
row.getValuesMap(fieldNames)
做同样的事情。请检查getValuesAsMap 的源代码
推荐阅读
- vb.net - LINQ、加入、GroupBy 和计数
- node.js - 无法在 MongoDB 中多次保存相同的条目
- react-native - “您无权访问”错误我该怎么办?
- python - Python - 创建了一个 .exe,但结果未显示
- c# - 如何将对象类型更改为其实际类型?
- c# - 使用 C# 从文件中解析 JSON 数据
- google-kubernetes-engine - 在 GKE 上禁用自动集群修复
- c++ - 基于文本的不同距离计算或指纹算法
- r - RNA-seq 数据分析中的报告工具:使用 GOstats 进行 GO 分析会出错
- python - 在 Pandas 中将对象数据类型转换为浮点数据类型会产生 NaN 值