Scala – 在模式匹配表达式中扩展参数列表
发布时间:2020-12-16 09:08:02 所属栏目:安全 来源:网络整理
导读:我对 Scala很新,并尝试将其用作Spark的接口.我遇到了将通用CSV转换为DataFrame函数的问题.例如,我有一个包含大约50个字段的CSV,其中第一个是任务,名称和ID.我可以得到以下工作: val reader = new CSVReader(new StringReader(txt))reader.readAll().map(_ m
我对
Scala很新,并尝试将其用作Spark的接口.我遇到了将通用CSV转换为DataFrame函数的问题.例如,我有一个包含大约50个字段的CSV,其中第一个是任务,名称和ID.我可以得到以下工作:
val reader = new CSVReader(new StringReader(txt)) reader.readAll().map(_ match { case Array(task,name,id,_*) => Row(task,id) case unexpectedArrayForm => throw new RuntimeException("Record did not have correct number of fields: "+ unexpectedArrayForm.mkString(",")) }) 但是,我宁愿不必硬编码创建spark Row所需的字段数.我试过这个: val reader = new CSVReader(new StringReader(txt)) reader.readAll().map(_ match { case Array(args @ _*) => Row(args) case unexpectedArrayForm => throw new RuntimeException("Record did not have correct number of fields: "+ unexpectedArrayForm.mkString(",")) }) 但它只是创建一个具有单个元素的Row对象.如何让它扩展Row(args)中的args,这样如果我有一个N个元素的数组,我将获得一个包含N个元素的Row? 解决方法
这应该做的伎俩:
val reader = new CSVReader(new StringReader(txt)) reader.readAll().map(_ match { case a: Array[String] => Row(a:_*) case unexpectedArrayForm => throw new RuntimeException("Record did not have correct number of fields: "+ unexpectedArrayForm.mkString(",")) }) 编辑以纠正Array类型的遗漏 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |