加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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类型的遗漏

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读