如何在Scala中向数组添加元素,并找到变量类型?
我有下面的Scala代码块作为我的数据处理管道的一部分。形成我目前所理解的,UDF接受一个file_contents类型String类型的参数。然后UDF进行一堆字符串处理,包括a split。
代码工作没有任何错误,但我正在尝试以下面的方式编辑和挣扎,主要是由于我对Scala的经验不足,以及在线寻找答案的困难。
我希望能够info根据长度为2个空字符串和2个零info。如果长度info为28,则添加这四个值,否则继续。我如何在下面的代码中完成此操作?我想先添加此代码val param_data。
如果有人不介意回答,我对此代码也有以下问题。
如果split将字符串转换为数组,为什么我无法使用它打印它的长度println(info)?这条线似乎打印了一个非常大的数字,我相信这是所有字符串的总长度。
你怎么知道这个UDF返回了什么?我没有看到return像Python等的声明。
def extract_FileContent_test = udf((file_contents: String) => {
val info = (file_contents.replace("","", " ")
.replace("\"", "")
.replaceAll(" ", "|")
.replaceAll(" : \r\n", " : empty\r\n")
.replaceAll("\r\n", "|")
.replaceAll(" : ", "|")
.replaceAll(": ", "|")
.split("\\|")
.map(x => x.trim.replaceAll(" -", ""))
.filterNot(s => s == ""))
println(info.length)
// type info : Array[String]
// type sec_index : Array[Int]
val sec_index = info.zipWithIndex.filter(_._1.startsWith("---")).map(_._2)
if (sec_index.length > 2) {
// parse meta_data (beam tuning context) and param_data (beam tuning parameter) separately
val meta_data = (info.slice(0, sec_index(0)).toList.grouped(2)
.filter(l => l.length == 2)
.filter(l => l(1) != "Start" & l(1) != "")
.map { case List(a, b) => b }
.toArray.mkString(",")
)
// println(meta_data)
val param_data = (info.slice(sec_index(0) + 1, sec_index(1)).toList.grouped(3)
.filter(l => l.length == 3)
.filter { case List(a, b, c) => Try(c.split(" ")(0).toDouble).isSuccess }
.map { case List(a, b, c) => Array(a, c.split(" ")(0)).mkString(",") }
.toArray)
// println(param_data)
/* one meta data will have > 100 param
so besides meta columns, we add 2 columns for param_name, param_value
*/
param_data.map(meta_data + "," + _)
}
else {
Array[String]()
}
})
获取信息的长度使用info.length
在Scala中,最后一个语句是返回值 - 这里是 if (sec_index.length > 2)它返回一个空数组的字符串或者返回最后一个映射后的params_data
关于向信息添加数据,您可以执行类似的操作
val info_with_filler = if ( info.length<28) info ++ List("","" ,"0","0") else info
然后在代码中使用info_with_filler而不是info
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。