【发布时间】:2023-03-06 20:42:01
【问题描述】:
我对 Scala 非常陌生,并试图将其用作 Spark 的接口。我在制作通用 CSV 到 DataFrame 函数时遇到问题。例如,我有一个包含大约 50 个字段的 CSV,其中第一个是 task、name 和 id。我可以让以下工作:
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 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?
【问题讨论】:
标签: scala apache-spark pattern-matching