gpt4 book ai didi

Scala - 在模式匹配表达式中扩展参数列表

转载 作者:行者123 更新时间:2023-12-01 09:54:20 24 4
gpt4 key购买 nike

我是 Scala 的新手,正在尝试将其用作 Spark 的接口(interface)。我在制作通用 CSV 到 DataFrame 函数时遇到问题。例如,我有一个包含大约 50 个字段的 CSV,其中第一个是 tasknameid。我可以让以下工作:

val reader = new CSVReader(new StringReader(txt))

reader.readAll().map(_ match {
case Array(task, name, id, _*) => Row(task, name, id)
case unexpectedArrayForm =>
throw new RuntimeException("Record did not have correct number of fields: "+ unexpectedArrayForm.mkString(","))
})

但是,我宁愿不必对创建 Spark 行所需的字段数进行硬编码。我试过这个:

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(args:_*)

This is what Row accepts per its apply signature .

事实上,除了将它传递给 Row 之外,您甚至不需要做任何事情,因为它已经是正确的序列类型。

reader.readAll().map(Row(_:_*))

关于Scala - 在模式匹配表达式中扩展参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com